This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
int32_t main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
long long arr[n],pref[n+1];
for(int i=0; i<n; i++) cin >> arr[i];
pref[0]=0;
for(int i=0; i<n; i++){
pref[i+1]=pref[i]+arr[i];
}
pair<int,long long> dp[n+1];
dp[0]={0,0};
vector<pair<int,long long> > mono;
mono.push_back({0,0});
for(int i=1; i<=n; i++){
int lo=0,hi=mono.size()-1,mid;
while(lo<hi){
mid=(lo+hi+1LL)/2;
if(mono[mid].second<=pref[i]) lo=mid;
else hi=mid-1;
}
assert(mono[lo].second<=pref[i]);
dp[i]={dp[mono[lo].first].first+1LL,pref[i]-pref[mono[lo].first]};
while(!mono.empty()&&mono.back().second>=dp[i].second+pref[i]){
mono.pop_back();
}
mono.push_back({i,dp[i].second+pref[i]});
}
cout << dp[n].first;
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... |