第二题我用的二分查找O(nlogn)也过了,代码: #include <iostream> using namespace std; const int MAXN = int(2e6 + 10); int A[MAXN]; int preSum[MAXN]; /* 3 3 1 2 3 4 5 6 7 8 9 */ int lower_bound(int p[], int l, int r, int target) {     while (l < r) {         int m = l + (r - l) / 2;         if (p[m] >= target) {             r = m;         } else {             l = m + 1;         }     }     return l; } int main () {     int n, s;     cin >> n >> s;     for (int i = 0; i < n; ++i) {         cin >> A[i];         if (i == 0) preSum[i] = A[i];         else preSum[i] = preSum[i - 1] + A[i];     }     // for (int i = 0; i < n; ++i) {     //     cout << preSum[i] << " ";     // }     int max_len = (A[0] <= s);     for (int i = 1; i < n; ++i) {         // Sum([i, j]) =  p[j] - p[i - 1] <= s         // p[i - 1] >= p[j] - s           int left = lower_bound(preSum, -1, i, preSum[i] - s);         max_len = max(max_len, i - left);     }     cout << max_len << endl;     return 0; }
点赞 评论

相关推荐

陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
07-02 22:46
门头沟学院 Java
码农索隆:hr:“管你投没投,先挂了再说”
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务