제출 #863001

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