Submission #1293115

#TimeUsernameProblemLanguageResultExecution timeMemory
1293115hahaBigger segments (IZhO19_segments)C++20
37 / 100
158 ms71096 KiB
#include <bits/stdc++.h> #define f first #define s second #define ll long long using namespace std; const int maxn=3e3+5; int n; int a[maxn]; int dp[maxn][maxn],Max[maxn][maxn]; ll sum[maxn]; int main() { ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; sum[i]=sum[i-1]+a[i]; } for(int i=0;i<=n+1;i++){ for(int j=1;j<=n+1;j++){ dp[i][j]=-1e9; Max[i][j]=-1e9; } } int ans=0; dp[1][1]=1; Max[1][1]=1; for(int i=2;i<=n;i++){ for(int j=i;j>=1;j--){ /* for(int u=1;u<j;u++){ if(sum[i]-sum[j-1]>=sum[j-1]-sum[u-1]){ // sum[u-1]>=2*sum[j-1]-sum[i] dp[j][i]=max(dp[j][i],dp[u][j-1]+1); } } */ ll val=2*sum[j-1]-sum[i]; int pos=lower_bound(sum,sum+j,val)-sum; dp[j][i]=max(dp[j][i],Max[pos+1][j-1]+1); //dp[j][i]=max(dp[j][i],get(1,1,n,pos+1,j-1,j-1)+1); //update(1,1,n,j,i,dp[j][i]); Max[j][i]=max(Max[j+1][i],dp[j][i]); } } for(int i=1;i<=n;i++) ans=max(ans,dp[i][n]); cout<<ans; }
#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...