제출 #707743

#제출 시각아이디문제언어결과실행 시간메모리
707743emptypringlescanBigger segments (IZhO19_segments)C++17
100 / 100
103 ms29120 KiB
#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 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...