呵呵。。我当时看了就想用分治来做(类似归并排序),但是归并的时候想不到怎么处理,感觉如果真要处理就跟我下面的代码一样,下面的代码是看了ac的人数直接写的。。 #include <iostream> #include <cmath> using namespace std; int k; int data[30000]; int n; int main() { while(cin >> n >> k) { for(int i = 0; i < n; i++) cin >> data[i]; int _max = 0; for(int i = 0; i < n; i++) { int maxone = data[i], minone = data[i]; int j = i + 1; for(; j < n; j++) { if(data[j] > maxone) maxone = data[j]; if(data[j] < minone) minone = data[j]; if(maxone - minone > k) break; } _max = max(_max, j - i); if(_max >= n - i) break; } cout << _max << endl; } return 0; }