# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
337474 | tjrwodnjs999 | Split the sequence (APIO14_sequence) | C++11 | 543 ms | 86124 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define ll long long
#define x first
#define y second
using namespace std;
int n,m,arr[100005],pv[100005][205];
ll DP[100005][2],sum[100005];
struct CHT{
ll a[101010], b[101010], c[101010];
int pv, top;
void clear(){
pv = top = 0;
}
ll f(ll idx, ll x){
return a[idx]*x + b[idx];
}
void udt(ll aa, ll bb, ll cc){
if(top >= 1 && aa == a[top-1]){
c[top-1] = cc; return;
}
while(top >= 2 && (b[top-1] - b[top-2]) * (a[top-2] - aa) >= (bb - b[top-2]) * (a[top-2] - a[top-1])) top--;
a[top] = aa;
b[top] = bb;
c[top] = cc;
top++;
if(pv >= top) pv = top - 1;
}
pair<ll,ll> qry(ll x){
while(pv+1 < top && a[pv+1]*x + b[pv+1] > a[pv]*x + b[pv]) pv++;
return {f(pv, x), c[pv]};
}
} cht;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%lld",arr+i),sum[i]=sum[i-1]+arr[i];
for(int j=1;j<=m;j++){
cht.clear();
for(int i=1;i<=n;i++){
pair<ll,int> qry=cht.qry(sum[i]);
DP[i][j%2]=qry.x; pv[i][j]=qry.y;
cht.udt(sum[i],-sum[i]*sum[i]+DP[i][(j+1)%2],i);
}
}
printf("%lld\n",DP[n][m%2]);
function<void (int,int)> solve = [&](int a,int b){
if(b==0) return;
solve(pv[a][b],b-1);
printf("%d ",pv[a][b]);
return;
};
solve(n,m);
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |