Submission #708937

#TimeUsernameProblemLanguageResultExecution timeMemory
708937amirhoseinfar1385Bigger segments (IZhO19_segments)C++17
100 / 100
204 ms72816 KiB
#include<bits/stdc++.h> using namespace std; pair<long long ,long long>comb(pair<long long ,long long>a,pair<long long ,long long>b){ if(a.first==b.first){ if(a.second<b.second){ return a; } return b; } if(a.first>b.first){ return a; } return b; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; vector<long long>all(n+1); for(int i=1;i<=n;i++){ cin>>all[i]; } vector<long long>ps(n+1); for(int i=1;i<=n;i++){ ps[i]=all[i]+ps[i-1]; } set<pair<long long,long long>>st[n+2]; vector<pair<long long ,long long>>dp(n+1); st[0].insert(make_pair(0,0)); st[1].insert(make_pair(ps[1]*2,1)); dp[1]=make_pair(1,ps[1]); long long k=1; for(int i=2;i<=n;i++){ dp[i]=dp[i-1]; dp[i].second+=all[i]; while((int)st[k-1].size()>0){ auto x=*st[k-1].begin(); if(x.first<=ps[i]){ dp[i]=comb(dp[i],make_pair(dp[x.second].first+1,ps[i]-ps[x.second])); st[k-1].erase(x); } else{ break; } } while((int)st[k].size()>0){ auto x=*st[k].begin(); if(x.first<=ps[i]){ dp[i]=comb(dp[i],make_pair(dp[x.second].first+1,ps[i]-ps[x.second])); st[k].erase(x); } else{ break; } } k=max(k,dp[i].first); st[dp[i].first].insert(make_pair(dp[i].second+ps[i],i)); } cout<<dp[n].first<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...