Submission #868882

#TimeUsernameProblemLanguageResultExecution timeMemory
868882VigneshwaranMahadevanBigger segments (IZhO19_segments)C++14
0 / 100
1 ms600 KiB
#include <bits/stdc++.h>
#include<iostream>
using namespace std;

void print(vector<int> &a){
    for(auto &x:a) cout<<x<<" ";
    cout<<endl;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t=1;// cin>>t;
    while(t--){
        int n; cin>>n;
        vector<int> a(n) , val(n,0) , dp(n,0),pre(n,0);
        for(int i=0;i<n;i++) cin>>a[i];

        val[0] = a[0];
        dp[0] = 1;
        pre[0] = a[0];
        for(int i=1;i<n;i++)
            pre[i] = pre[i-1]+a[i];
        
        vector<int> bsArr;
        bsArr.push_back(pre[0]+val[0]);

        for(int i=1;i<n;i++){
            //index i,
            //find index j such that
            // j < i
            // pre[i] - pre[j] >= val[j]
            int j = upper_bound(bsArr.begin(),bsArr.end(),pre[i]) - bsArr.begin() - 1;

            if(j==-1){
                val[i] = pre[i];
                dp[i]=1;
            }
            else {
                val[i] = pre[i]-pre[j];
                dp[i] = 1+dp[j];
            }
            bsArr.push_back(pre[i]+val[i]);
        }
        cout<<dp[n-1]<<endl;   
    }
    return 0;
}
#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...