Submission #159137

#TimeUsernameProblemLanguageResultExecution timeMemory
159137nafis_shifatSplit the sequence (APIO14_sequence)C++14
0 / 100
353 ms131076 KiB
#include<bits/stdc++.h> #define pii pair<int,int> #define ll long long using namespace std; const ll inf=1e15; int path[100000+10][200+10]={}; void print(int st,int k) { if(path[st][k]==0) { cout<<st<<" "; return; } print(path[st][k],k-1); cout<<st<<" "; } int main() { int n,k; cin>>n>>k; ll dp[n+10][k+10]={}; ll a[n+5]={}; ll cum1[n+5]={}; ll cum2[n+5]={}; for(int i=1;i<=n;i++) { cin>>a[i]; cum1[i]=cum1[i-1]+a[i]; } for(int i=n;i>0;i--)cum2[i]=cum2[i+1]+a[i]; for(int i=0;i<=n;i++)for(int j=0;j<=k;j++)dp[i][j]=0; for(int i=0;i<=n;i++) { dp[i][0]=0; dp[i][1]=cum1[i]*cum2[i+1]; path[i][1]=0; } for(int i=1;i<n;i++) { for(int j=2;j<=k && j<=i;j++) { int r=i-1; int l=j-1; int p=0; if(l==r) { dp[i][j]=dp[i-1][j-1]+(cum1[i]-cum1[i-1])*cum2[i+1]; path[i][j]=i-1; continue; } while(r>=l) { int mid1 = l+(r-l)/3; int mid2 = r-(r-l)/3; if(dp[mid1][j-1]+(cum1[i]-cum1[mid1])*cum2[i+1]>dp[mid2][j-1]+(cum1[i]-cum1[mid2])*cum2[i+1]) { r=mid2-1; p=mid1; } else { p=mid2; l=mid1+1; } } //cout<<i<<" "<<j<<endl; dp[i][j]=dp[p][j-1]+(cum1[i]-cum1[p])*cum2[i+1]; path[i][j]=p; } } ll mx=0,st; for(int i=1;i<=n;i++) { if(dp[i][k]>mx) { mx=dp[i][k]; st=i; } } cout<<mx<<endl; print(st,k); //for(int i=1;i<=10;i++)cout<<dp[i][3]+(cum1[11]-cum1[i])*cum2[12]<<" "<<dp[i][3]<<endl; return 0; }

Compilation message (stderr)

sequence.cpp: In function 'int main()':
sequence.cpp:94:7: warning: 'st' may be used uninitialized in this function [-Wmaybe-uninitialized]
  print(st,k);
  ~~~~~^~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...