제출 #370068

#제출 시각아이디문제언어결과실행 시간메모리
370068wildturtleBigger segments (IZhO19_segments)C++14
100 / 100
277 ms20944 KiB
#include<bits/stdc++.h> using namespace std; long long a,b,c,d,i,e,f,g,n,m,k,l,A[500005],B[500005],ans,mid,le,ri; pair <long long,long long> dp[500005]; int main() { cin>>n; for(long long i=1;i<=n;i++) { cin>>A[i]; B[i]=A[i]+B[i-1]; dp[i]={1,-B[i]}; } for(long long i=1;i<n;i++) { dp[i+1]=max(dp[i+1],{dp[i].first,dp[i].second-A[i+1]}); //cout<<i+1<<" "<<dp[i+1].first<<" "<<-dp[i+1].second<<endl; le=i+1; ri=n; ans=-1; while(le<=ri) { mid=(le+ri)/2; if(B[mid]-B[i]>=-dp[i].second) { ans=mid; ri=mid-1; } else le=mid+1; } if(ans==-1) continue; dp[ans]=max(dp[ans],{dp[i].first+1,-B[ans]+B[i]}); //cout<<ans<<" "<<dp[ans].first<<" "<<-dp[ans].second<<endl; } cout<<dp[n].first; }
#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...