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...