// Lagrangian Relaxation & Li Chao Tree
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INF (int)1e18
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N,K;
cin>>N>>K;
vector<int>v(N+1),pf(N+1);
for(int i=0;i<N;i++){
cin>>v[i];
pf[i+1]=pf[i]+v[i];
}
auto solve=[&](int y)->pair<int,int>{
vector<int>dp(N+1,INF),cnt(N+1),t((N+1)*4);
auto cost=[&](int s,int e)->int{
return dp[s]+(pf[e]-pf[s])*(e-s);
};
auto add=[&](int i,int l,int r,int p)->void{
while(true){
int m=(l+r)/2;
bool ll=cost(p,l)<cost(t[i],l);
bool mm=cost(p,m)<cost(t[i],m);
if(mm){
swap(t[i],p);
}
if(l==r){
break;
}
if(ll!=mm){
i=i*2+1;
r=m;
}
else{
i=i*2+2;
l=m+1;
}
}
};
auto get=[&](int i,int l,int r,int x)->int{
int bc=INF,bi=0;
while(true){
int m=(l+r)/2;
int c=cost(t[i],x);
if(c<bc){
bc=c;
bi=t[i];
}
if(l==r){
break;
}
if(x<m){
i=i*2+1;
r=m;
}
else{
i=i*2+2;
l=m+1;
}
}
return bi;
};
dp[0]=-y;
cnt[0]=-1;
add(0,0,N,0);
for(int i=1;i<=N;i++){
int o=get(0,0,N,i);
dp[i]=cost(o,i)+y;
cnt[i]=cnt[o]+1;
add(0,0,N,i);
}
return{dp[N],cnt[N]};
};
int l=0,h=1e12;
while(l<h){
int m=(l+h)/2;
auto [x,c]=solve(m);
if(c<=K){
h=m;
}
else{
l=m+1;
}
}
auto [x,c]=solve(h);
cout<<x-c*h<<'\n';
return 0;
}
Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
---|---|---|---|---|---|---|---|
subtask1 | 0/0 | ||||||
1 | Elfogadva | 3ms | 1824 KiB | ||||
2 | Elfogadva | 46ms | 2920 KiB | ||||
subtask2 | 10/10 | ||||||
3 | Elfogadva | 3ms | 2332 KiB | ||||
4 | Elfogadva | 3ms | 2504 KiB | ||||
5 | Elfogadva | 3ms | 2544 KiB | ||||
6 | Elfogadva | 3ms | 2628 KiB | ||||
7 | Elfogadva | 3ms | 2848 KiB | ||||
subtask3 | 10/10 | ||||||
8 | Elfogadva | 6ms | 2868 KiB | ||||
9 | Elfogadva | 6ms | 3136 KiB | ||||
10 | Elfogadva | 6ms | 3464 KiB | ||||
11 | Elfogadva | 6ms | 3316 KiB | ||||
12 | Elfogadva | 6ms | 3380 KiB | ||||
subtask4 | 20/20 | ||||||
13 | Elfogadva | 46ms | 3984 KiB | ||||
14 | Elfogadva | 48ms | 4016 KiB | ||||
15 | Elfogadva | 50ms | 4056 KiB | ||||
16 | Elfogadva | 54ms | 4096 KiB | ||||
17 | Elfogadva | 54ms | 4128 KiB | ||||
18 | Elfogadva | 52ms | 4288 KiB | ||||
subtask5 | 0/29 | ||||||
19 | Hibás válasz | 519ms | 10244 KiB | ||||
20 | Hibás válasz | 522ms | 10456 KiB | ||||
21 | Elfogadva | 538ms | 10924 KiB | ||||
22 | Elfogadva | 532ms | 11376 KiB | ||||
23 | Elfogadva | 550ms | 11652 KiB | ||||
subtask6 | 0/31 | ||||||
24 | Hibás válasz | 1.08s | 18536 KiB | ||||
25 | Hibás válasz | 1.09s | 19296 KiB | ||||
26 | Hibás válasz | 1.074s | 20040 KiB | ||||
27 | Hibás válasz | 1.088s | 20572 KiB | ||||
28 | Hibás válasz | 1.083s | 21236 KiB | ||||
29 | Hibás válasz | 1.082s | 22008 KiB | ||||
30 | Hibás válasz | 1.082s | 22576 KiB | ||||
31 | Hibás válasz | 1.083s | 23640 KiB | ||||
32 | Hibás válasz | 1.085s | 24196 KiB | ||||
33 | Elfogadva | 1.087s | 24880 KiB | ||||
34 | Elfogadva | 1.128s | 25520 KiB | ||||
35 | Elfogadva | 1.139s | 25648 KiB | ||||
36 | Elfogadva | 1.146s | 25896 KiB | ||||
37 | Elfogadva | 1.149s | 25896 KiB | ||||
38 | Elfogadva | 1.149s | 25900 KiB | ||||
39 | Elfogadva | 1.118s | 26112 KiB | ||||
40 | Elfogadva | 1.09s | 26328 KiB |