Submission #106466

#TimeUsernameProblemLanguageResultExecution timeMemory
106466nxteruSplit the sequence (APIO14_sequence)C++14
Compilation error
0 ms0 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 1000000000000000000 struct t{ ll x,y,q; }; bool check(t a,t b,t c){ return (_int128)(c.y-b.y)*(_int128)(a.x-b.x)<=(_int128)(b.y-a.y)*(_int128)(b.x-c.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 'bool check(t, t, t)':
sequence.cpp:15:10: error: '_int128' was not declared in this scope
  return (_int128)(c.y-b.y)*(_int128)(a.x-b.x)<=(_int128)(b.y-a.y)*(_int128)(b.x-c.x);
          ^~~~~~~
sequence.cpp:15:10: note: suggested alternative: '__int128_t'
  return (_int128)(c.y-b.y)*(_int128)(a.x-b.x)<=(_int128)(b.y-a.y)*(_int128)(b.x-c.x);
          ^~~~~~~
          __int128_t
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);
   ~~~~~^~~~~~~~~~~