#include<bits/stdc++.h>
#define MAXN 500007
using namespace std;
int n,a[MAXN];
long long pref[MAXN];
pair<int,long long> dp[MAXN];
vector<int> st;
int findlast(long long val){
int l=0,r=int(st.size()),tt;
while(l+1<r){
tt=(l+r)/2;
if(dp[st[tt]].second+pref[st[tt]]<=val){
l=tt;
}else{
r=tt;
}
}
return st[l];
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
pref[i]=pref[i-1]+a[i];
}
dp[0]={0,0};
st={0};
for(int i=1;i<=n;i++){
int pos=findlast(pref[i]);
dp[i]={dp[pos].first+1,pref[i]-pref[pos]};
while(!st.empty() and dp[i].first+pref[i]<=dp[st.back()].first+pref[st.back()])st.pop_back();
st.push_back(i);
}
cout<<dp[n].first<<"\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |