10323 2024. 03. 30 21:01:41 111 Majomház cpp17 Hibás válasz 0/100 3.101s 38576 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

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 cost=[&](int s,int e)->int{
		return (pf[e]-pf[s])*(e-s);
	};
	auto solve=[&](int y)->pair<int,int>{
		vector<int>dp(N+1,1e18),cnt(N+1);
		vector<vector<int>>chk(N+1);
		int o=0;
		auto bs=[&](int i)->int{
			int l=i+1,h=N;
			while(l<h){
				int m=(l+h)/2;
				if(dp[i]+cost(i,m)<dp[o]+cost(o,m)){
					h=m;
				}
				else{
					l=m+1;
				}
			}
			return h;
		};
		dp[0]=-y;
		cnt[0]=-1;
		for(int i=1;i<=N;i++){
			for(int j:chk[i]){
				if(j<o){
					continue;
				}
				if(dp[j]+cost(j,i)<dp[o]+cost(o,i)){
					o=j;
				}
				chk[bs(j)].push_back(j);
			}
			dp[i]=dp[o]+cost(o,i)+y;
			cnt[i]=cnt[o]+1;
			chk[bs(i)].push_back(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 1956 KiB
2 Hibás válasz 164ms 3612 KiB
subtask2 0/10
3 Elfogadva 3ms 2316 KiB
4 Elfogadva 3ms 2484 KiB
5 Elfogadva 3ms 2644 KiB
6 Hibás válasz 3ms 2640 KiB
7 Elfogadva 3ms 2884 KiB
subtask3 0/10
8 Elfogadva 14ms 2948 KiB
9 Elfogadva 14ms 3200 KiB
10 Hibás válasz 13ms 3416 KiB
11 Hibás válasz 12ms 3688 KiB
12 Hibás válasz 9ms 3728 KiB
subtask4 0/20
13 Elfogadva 158ms 4884 KiB
14 Elfogadva 179ms 4932 KiB
15 Hibás válasz 190ms 5012 KiB
16 Hibás válasz 174ms 4972 KiB
17 Hibás válasz 157ms 5096 KiB
18 Hibás válasz 119ms 5144 KiB
subtask5 0/29
19 Hibás válasz 2.655s 20416 KiB
20 Hibás válasz 2.658s 20312 KiB
21 Elfogadva 2.634s 20424 KiB
22 Hibás válasz 2.444s 20372 KiB
23 Hibás válasz 2.234s 20328 KiB
subtask6 0/31
24 Időlimit túllépés 3.062s 20456 KiB
25 Időlimit túllépés 3.069s 20472 KiB
26 Időlimit túllépés 3.062s 20364 KiB
27 Időlimit túllépés 3.051s 20456 KiB
28 Időlimit túllépés 3.101s 20496 KiB
29 Időlimit túllépés 3.051s 20492 KiB
30 Időlimit túllépés 3.016s 20748 KiB
31 Időlimit túllépés 3.042s 20744 KiB
32 Időlimit túllépés 3.053s 20704 KiB
33 Időlimit túllépés 3.048s 20368 KiB
34 Időlimit túllépés 3.075s 20252 KiB
35 Időlimit túllépés 3.059s 20372 KiB
36 Időlimit túllépés 3.066s 20620 KiB
37 Időlimit túllépés 3.055s 20652 KiB
38 Hibás válasz 2.782s 38360 KiB
39 Hibás válasz 2.395s 38364 KiB
40 Hibás válasz 2.125s 38576 KiB