이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 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... |