Submission #331020

#TimeUsernameProblemLanguageResultExecution timeMemory
331020leinad2수열 (APIO14_sequence)C++14
49 / 100
174 ms131076 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; struct line { ll a, b, index; }; vector<line>V; double cross(const line &p, const line &q) { return (double)(q.b-p.b)/(p.a-q.a); } void push(line x) { if(V.size()&&V.back().a==x.a) { if(V.back().b<x.b)V.back().b=x.b; return; } while(V.size()>=2) { if(cross(V.back(), V[V.size()-2])>cross(V.back(), x))V.pop_back(); else break; } V.push_back(x); } pair<ll, ll>query(ll x) { ll a=0, b=V.size(), m; while(a+1<b) { m=(a+b)/2; if(cross(V[m-1], V[m])<=x)a=m; else b=m; } return {V[a].a*x+V[a].b, V[a].index}; } ll n, i, j, k, t, a, b, c, A[100010], dp[100010][2], backtrack[100010][210]; int main() { for(scanf("%lld %lld", &n, &k);i++<n;) { scanf("%lld", &A[i]); A[i]+=A[i-1]; } for(j=0;j++<k;) { for(i=0;i++<n;) { push({A[i], dp[i][0]-A[i]*A[i], i}); pair<ll, ll>p=query(A[i]); dp[i][1]=p.first; backtrack[i][j]=p.second; dp[i][0]=dp[i][1]; } V.clear(); } printf("%lld\n", dp[n][1]); i=n; j=k; vector<ll>ans; while(j>0) { i=backtrack[i][j]; j--; ans.push_back(i); } while(ans.size()) { printf("%lld ", ans.back()); ans.pop_back(); } }

Compilation message (stderr)

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