제출 #1131986

#제출 시각아이디문제언어결과실행 시간메모리
1131986alexander707070Bigger segments (IZhO19_segments)C++20
100 / 100
134 ms16072 KiB
#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].second+pref[i]<=dp[st.back()].second+pref[st.back()])st.pop_back(); st.push_back(i); } cout<<dp[n].first<<"\n"; 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...