Submission #482198

#TimeUsernameProblemLanguageResultExecution timeMemory
482198Ronin13Bigger segments (IZhO19_segments)C++14
37 / 100
1585 ms224304 KiB
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pb push_back
#define epb emplace_back
#define inf 1e9+1
#define linf 1e18+1
#define f first
#define s second
using namespace std;

void solve(){
    int n;cin>>n;
    ll a[n+1];
    for(int i=1;i<=n;i++)cin>>a[i];
    ll dp[n+1][n+1];
    dp[0][1]=0;
    for(int i=1;i<=n;i++){
        dp[i][1]=dp[i-1][1]+a[i];
    }
    set<pll>t;
    for(int j=2;j<=n;j++){
        while(!t.empty())t.erase(t.begin());
        for(int i=1;i<=n;i++){
            set<pll>::iterator it=t.upper_bound({dp[i][1],linf});
            if(it==t.begin()){
                dp[i][j]=linf;
            }
            else{
                it--;
                ll x=it->s;
                dp[i][j]=dp[i][1]-dp[x][1];
            }
            while(!t.empty()){
                pll x=*t.rbegin();
                if(x.f<=dp[i][j-1]+dp[i][1])break;
                t.erase(x);
            }
            t.insert({dp[i][j-1]+dp[i][1],i});
        }
    }
        for(int x=n;x>=1;x--){
            if(dp[n][x]!=linf){
                cout<<x<<"\n";
                return;
            }
        }
}

int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);
    //freopen("in.in","r",stdin);freopen("out.out","w",stdout);
    int test=1;//cin>>test;
    while(test--){
        solve();
    }
}
#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...