Submission #370578

#TimeUsernameProblemLanguageResultExecution timeMemory
37057879brue수열 (APIO14_sequence)C++14
0 / 100
30 ms7788 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; struct Line{ ll a, b; int idx; Line(){} Line(ll a, ll b, int idx): a(a), b(b), idx(idx){} ll get(ll x){ return a*x+b; } }; double cross(Line &f, Line &g){ return (g.b - f.b) / (f.a - g.a); } int n, k; ll sumSquare; ll arr[100002], sum[100002]; ll DP[2][100002]; int idx[202][100002]; vector<Line> stk; int pnt = 0; void track(int x, int y){ if(!x) return; track(idx[y][x], y-1); if(y!=k) printf("%d ", x); } int main(){ scanf("%d %d", &n, &k); for(int i=1; i<=n; i++){ scanf("%lld", &arr[i]); sum[i] = arr[i] + sum[i-1]; } sumSquare = accumulate(arr+1, arr+n+1, 0LL); sumSquare = sumSquare * sumSquare; for(int i=1; i<=n; i++) DP[0][i] = sum[i] * sum[i]; for(int i=1; i<=k; i++){ stk.clear(); stk.push_back(Line(1, 2e18, -1)); pnt = 0; for(int j=i; j<=n; j++){ while(pnt < (int)stk.size()-1 && stk[pnt+1].get(sum[j]) < stk[pnt].get(sum[j])) pnt++; DP[i&1][j] = stk[pnt].get(sum[j]) + sum[j] * sum[j]; idx[i][j] = stk[pnt].idx; Line tmp = Line(-sum[j] * 2, sum[j] * sum[j] + DP[!(i&1)][j], j); int ts = (int)stk.size(); while((int)stk.size() > 1 && cross(stk[ts-1], stk[ts-2]) >= cross(stk[ts-2], tmp)){ stk.pop_back(); } stk.push_back(tmp); } } printf("%lld\n", (sumSquare - DP[k&1][n]) / 2); track(n, k); }

Compilation message (stderr)

sequence.cpp: In function 'int main()':
sequence.cpp:36:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   36 |     scanf("%d %d", &n, &k);
      |     ~~~~~^~~~~~~~~~~~~~~~~
sequence.cpp:38:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   38 |         scanf("%lld", &arr[i]);
      |         ~~~~~^~~~~~~~~~~~~~~~~
#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...