【思维】前缀和——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; }