Submission #206898

#TimeUsernameProblemLanguageResultExecution timeMemory
206898brcodeBigger segments (IZhO19_segments)C++14
100 / 100
341 ms16120 KiB
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 5e5+5;
long long pref[MAXN];
long long dp[MAXN];
long long previ[MAXN];
int main(){
    long long n;
    cin>>n;
    for(long long i=1;i<=n;i++){
        cin>>pref[i];
        pref[i] +=pref[i-1];
    }
    for(long long i=1;i<=n;i++){
        previ[i] = max(previ[i],previ[i-1]);
        dp[i] = dp[previ[i]]+1;
        //cout<<i<<" "<<dp[i]<<endl;
        long long l = i+1;
        long long r = n;
        long long target;
        if(previ[i]){
            target = pref[i]-pref[previ[i]];
        }else{
            target = pref[i];
        }
        long long tempans =0;
        while(l<=r){
            long long mid = (l+r)/2;

            if(target<=pref[mid]-pref[i]){
                r=mid-1;
                tempans= mid;
            }else{
                l=mid+1;
               //tempans = mid;
            }
        }
      //  cout<<i<<" "<<tempans<<endl; 
        if(tempans){
            previ[tempans] = max(previ[tempans],i);
            
        }
    }
    cout<<dp[n]<<endl;
}
#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...