package main import ( "bufio" "fmt" "os" "strconv" ) func main() { for { scanner := bufio.NewScanner(os.Stdin) // 设置大缓冲区,防止大输入时出错 buf := make([]byte, 1024*1024) // 1MB scanner.Buffer(buf, 1024*1024) scanner.Split(bufio.ScanWords) // 按单词扫描(空格、换行等分隔) // 读取第一行:n scanner.Scan() n, _ := strconv.Atoi(scanner.Text()) if n == 0 { break } arr := make([]int, n) for i := 0; i < n; i++ { scanner.Scan() arr[i], _ = strconv.Atoi(scanner.Text()) } fmt.Println(process(arr)) } } type Bucket struct { minnu int maxnu int isused bool } func process(arr []int) int { if len(arr) < 2 { return 0 } minnu, maxnu := arr[0], arr[0] for i := 1; i < len(arr); i++ { minnu = min(minnu, arr[i]) maxnu = max(maxnu, arr[i]) } // 保证interfal不为0 interfal := (maxnu-minnu)/(len(arr)+1) + 1 // 至少有一个空桶, bucket := make([]Bucket, len(arr)+1) for _, v := range arr { index := (v - minnu) / interfal if !bucket[index].isused { bucket[index].isused = true bucket[index].minnu = v bucket[index].maxnu = v } else { bucket[index].minnu = min(bucket[index].minnu, v) bucket[index].maxnu = max(bucket[index].maxnu, v) } } first := true premax := 0 maxres := 0 for _, v := range bucket { if v.isused && first { premax = v.maxnu first = false } else if v.isused { maxres = max(v.minnu-premax, maxres) premax = v.maxnu } } return maxres } func min(a, b int) int { if a < b { return a } return b } func max(a, b int) int { if a > b { return a } return b }