80分,wa点4,求助
查看原帖
80分,wa点4,求助
767099
WEXI7111楼主2022/12/4 09:42
#include<bits/stdc++.h>
using namespace std;

const int N=400010;
int a[N];
long long sum[N];

int main()
{
    // freopen("1121.in","r",stdin);
    // freopen("1121.out","w",stdout)
    int n;
    scanf("%d",&n);
    for(int i = 1;i <= n;i ++)
    {
        scanf("%d",&a[i]);
        sum[i] = sum[i-1] + a[i];
    }
    for(int i = n + 1;i <= 2 * n;i ++)
    {
        a[i] = a[i-n];sum[i] = sum[i - 1] + a[i];
    }
    int l = 1,r = 1,inl = 1,inr = 1;
    long long c = -1e9,ans = 0;
    while(l <= r)
    {
        if(a[r + 1] + sum[r] - sum[l - 1] > a[r + 1]) ++ r;
        else l = r + 1, ++ r;
        if(r - l + 1 >= n - 1) ++l;
        if(sum[r] - sum[l - 1] > c) 
        {
            c = sum[r] - sum[l - 1];
            inl = l,inr = r;
        }
        if(l == n || r == 2 * n) break;
    }
    // for(int i = 1;i <= n;i ++) cout << sum[i] <<' ';
    // cout<< endl;
    // cout << inl << ' ' << inr << ' ' << c <<endl;

    ans += c;
    int ll = max(1,inr - n + 1),rr = ll,inll = ll,inrr = ll;c = 0;
    if(inl == inr) c=-1e9;
    while(ll <= rr)
    {
        if(a[rr + 1] + sum[rr] - sum[ll - 1] > a[rr + 1]) ++ rr;
        else ll = rr + 1, ++ rr;
        if(rr - ll + 1 >= n) ++ll;
        if(rr == inl || ll > n || rr == 2 * n) break;
        if(sum[rr] - sum[ll - 1] > c) 
        {
            c = sum[rr] - sum[ll - 1];
            inll = ll,inrr = rr;
        }
        // cout<< c <<' '<< ll <<' '<< rr <<endl;
    }
    ll = inr + 1,rr = ll;
    
    while(ll <= rr)
    {
        if(a[rr + 1] + sum[rr] - sum[ll - 1] > a[rr + 1]) ++ rr;
        else ll = rr + 1, ++ rr;
        
        if(rr == inl + n) break;
        if(sum[rr] - sum[ll - 1] > c) 
        {
            c = sum[rr] - sum[ll - 1];
            inll = ll,inrr = rr;
        }
    }
    // cout << inll <<' ' << inrr <<' '<< c << endl;

    ans += c;
    cout << ans;
    return 0;
}
2022/12/4 09:42
加载中...