이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int n;
cin>>n;
int a[n+2];
ll p[n+2];
ll s=0;
for(int i=0;i<n;i++){
cin>>a[i];
s+=a[i];
p[i]=s;
}
pair<int,ll>dp[n];
dp[0]={1,a[0]};
int mx=1;
for(int i=1;i<n;i++){
int l=0,r=i;
while(l<r){
int mid=(l+r+1)/2;
bool f=true;
if(mid){
f=false;
ll s=p[i];
s-=p[mid-1];
if(s>=dp[mid-1].second || dp[mid-1].first<mx){
f=true;
}
}
if(f){
l=mid;
}else{
r=mid-1;
}
}
dp[i].first=1;
dp[i].second=p[i];
if(l){
dp[i].first=dp[l-1].first+1;
dp[i].second-=p[l-1];
}
mx=max(mx,dp[i].first);
}
cout<<dp[n-1].first<<endl;
}
/*
6
4 / 1 2 1 / 2 2
*/
# | 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... |