Submission #106458

#TimeUsernameProblemLanguageResultExecution timeMemory
106458nxteruSplit the sequence (APIO14_sequence)C++14
33 / 100
156 ms132096 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef double D; typedef pair<ll,ll> P; #define M 1000000007 #define F first #define S second #define PB push_back #define INF 100000000000000000 struct t{ ll x,y,q; }; bool check(t a,t b,t c){ return D(c.y-b.y)/D(b.x-c.x)<=D(b.y-a.y)/D(a.x-b.x); } ll n,m,s[100005],dp[205][100005],b[205][100005],l,r; t dq[100005]; vector<int>ans; int main(void){ scanf("%lld%lld",&n,&m); m++; for(int i=1;i<=n;i++){ ll a; scanf("%lld",&a); s[i]=s[i-1]+a; } for(int i=0;i<=m;i++)for(int j=0;j<=n;j++)dp[i][j]=INF; dp[0][0]=0; for(int i=1;i<=m;i++){ l=0,r=0; for(int j=1;j<=n;j++){ if(dp[i-1][j-1]!=INF){ t p=t{-2LL*s[j-1],s[j-1]*s[j-1]+dp[i-1][j-1],j-1}; while(r-2>=l&&check(dq[r-2],dq[r-1],p))r--; dq[r++]=p; while(l+1<r&&dq[l].x*s[j]+dq[l].y>=dq[l+1].x*s[j]+dq[l+1].y)l++; } if(l<r){ b[i][j]=dq[l].q; dp[i][j]=dq[l].x*s[j]+dq[l].y+s[j]*s[j]; } } } printf("%lld\n",(s[n]*s[n]-dp[m][n])/2LL); int x=n; for(int i=m;i>1;i--){ ans.PB(b[i][x]); x=b[i][x]; } for(int i=ans.size()-1;i>=0;i--){ printf("%d",ans[i]); if(i==0)printf("\n"); else printf(" "); } }

Compilation message (stderr)

sequence.cpp: In function 'int main()':
sequence.cpp:21:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld%lld",&n,&m);
  ~~~~~^~~~~~~~~~~~~~~~~~
sequence.cpp:25:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld",&a);
   ~~~~~^~~~~~~~~~~
#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...