二分
by Katz @ 2023-08-07 11:31:28
可以二分答案
by _O_v_O_ @ 2023-08-07 11:31:48
@[wzc666](/user/678221) 二分
by Argvchs @ 2023-08-07 11:31:55
遍历数组 $a$, 然后维护一个 $sum$,记录 $sum$ 的最小值,最后取 $sum$ 的相反数并 $+1$,最后和 $1$ 取 $\max$。
by Larry76 @ 2023-08-07 11:36:39
谢谢dalao们
by Rtaaa @ 2023-08-07 11:42:29
可以二分。
```cpp
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,a[100001];
bool check (int k)
{
for (int i=1;i<=n;i++)
{
k+=a[i];
if (k<=0) return false;
}
return true;
}
signed main ()
{
cin>>n;
for (int i=1;i<=n;i++) cin>>a[i];
int r=1,l=n*1000,mid,s;
while (r<=l)
{
mid=(r+l)/2;
if (check (mid)) s=mid,l=mid-1;
else r=mid+1;
}
cout<<s<<endl;
return 0;
}
```
by hhhcj @ 2023-08-12 13:07:25
还有!
```
#include<cstdio>
using namespace std;
int n,a[10000005],x,ans=1;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;){
if(a[i]>0){
x=a[i];
a[i]=0;
while(x>0&&i<=n){
i++;
if(a[i]>=0){
x+=a[i];
a[i]=0;
}
else{
if(x<-a[i]){
a[i]+=x;
x=0;
}
else{
x+=a[i];
a[i]=0;
}
}
}
}
i++;
}
for(int i=1;i<=n;i++){
ans-=a[i];
}
printf("%d",ans);
return 0;
}
``````
by ShaunSH @ 2024-07-19 08:04:49