全部评论 1

  • #include <cstdio>
    #include <iostream>
    #include <deque>
    #include <algorithm>
    using namespace std;
    
    const int MAXN = 5e5 + 10;
    int n, m;
    int p[MAXN];
    long long sum[MAXN];
    deque<int> dq;
    
    int main() {
        scanf("%d%d", &n, &m);
        
        for (int i = 1; i <= n; i++) {
            scanf("%d", &p[i]);
            sum[i] = sum[i - 1] + p[i];
        }
        
        long long ans = -1e18;
        dq.push_back(0);
        
        for (int i = 1; i <= n; i++) {
        	
            while (!dq.empty() && dq.front() < i - m) 
                dq.pop_front();
            
            if (!dq.empty()) 
                ans = max(ans, sum[i] - sum[dq.front()]);
            else
                ans = max(ans, sum[i] - sum[i-1]);
                
            while (!dq.empty() && sum[dq.back()] >= sum[i]) 
                dq.pop_back();
            
            dq.push_back(i);
        }
        
        printf("%lld\n", ans);
        return 0;
    }
    

    为什么这种写法错了

    1周前 来自 江苏

    0
暂无数据

提交答案之后,这里将显示提交结果~

首页