10327 2024. 03. 30 22:48:51 111 Majomház cpp17 Hibás válasz 40/100 1.149s 26328 KiB
// 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