【思维】前缀和——cf1358E

为啥我自己用后缀和来做就有问题。。

感觉没道理错啊

用前缀一次就过了

/*
a1,a2,a3...x,x,x,x,...

*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 600005

ll n,a[N],x,b[N],pre[N],mi[N];


int main(){
    cin>>n;
    for(int i=1;i<=n-n/2;i++)cin>>a[i];
    cin>>x;
    for(int i=n-n/2+1;i<=n;i++)a[i]=x;
    
    //if(n==500000)cout<<x<<'\n';
    
    if(x>=0){
        ll sum=0;
        for(int i=1;i<=n;i++)sum+=a[i];
        if(sum>0)cout<<n<<'\n';
        else cout<<-1;
        return 0;
    } 
    
    for(int i=1;i<=n;i++)pre[i]=pre[i-1]+a[i];
    ll sum=0;
    for(int i=1;i<=n;i++){
        sum+=x-a[i];
        mi[i]=min(mi[i-1],sum);
    }
    
    for(int k=n-n/2;k<=n;k++){
        ll sum=pre[k];
        sum=min(sum,sum+mi[n-k]);
        if(sum>0){
            cout<<k;return 0;
        }
    }
    cout<<-1;
    return 0;
    
} 
 

 

posted on 2020-05-28 10:36  zsben  阅读(194)  评论(0编辑  收藏  举报

导航