10324 2024. 03. 30 21:09:02 111 Majomház cpp17 Futási hiba 0/100 3.101s 40396 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+2);
		int o=0;
		auto bs=[&](int l,int i)->int{
			int 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(dp[j]+cost(j,i)<dp[o]+cost(o,i)){
					o=j;
				}
				if(j>=o){
					chk[bs(i+1,j)].push_back(j);
				}
			}
			dp[i]=dp[o]+cost(o,i)+y;
			cnt[i]=cnt[o]+1;
			chk[bs(i+1,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 Futási hiba 3ms 1936 KiB
2 Elfogadva 163ms 3548 KiB
subtask2 0/10
3 Futási hiba 3ms 2212 KiB
4 Elfogadva 3ms 2364 KiB
5 Elfogadva 3ms 2576 KiB
6 Elfogadva 3ms 2660 KiB
7 Futási hiba 3ms 2512 KiB
subtask3 0/10
8 Elfogadva 13ms 2860 KiB
9 Elfogadva 14ms 3072 KiB
10 Elfogadva 13ms 3024 KiB
11 Futási hiba 4ms 3392 KiB
12 Futási hiba 4ms 3596 KiB
subtask4 0/20
13 Elfogadva 153ms 4832 KiB
14 Elfogadva 178ms 5260 KiB
15 Elfogadva 188ms 5276 KiB
16 Elfogadva 179ms 5616 KiB
17 Elfogadva 159ms 5476 KiB
18 Futási hiba 41ms 5648 KiB
subtask5 0/29
19 Hibás válasz 2.565s 21736 KiB
20 Hibás válasz 2.569s 21848 KiB
21 Elfogadva 2.559s 21696 KiB
22 Elfogadva 2.397s 22100 KiB
23 Elfogadva 2.223s 22036 KiB
subtask6 0/31
24 Időlimit túllépés 3.062s 21788 KiB
25 Időlimit túllépés 3.068s 21888 KiB
26 Időlimit túllépés 3.062s 21652 KiB
27 Időlimit túllépés 3.065s 21728 KiB
28 Időlimit túllépés 3.075s 21860 KiB
29 Időlimit túllépés 3.101s 21976 KiB
30 Időlimit túllépés 3.073s 21848 KiB
31 Időlimit túllépés 3.075s 21780 KiB
32 Időlimit túllépés 3.071s 21976 KiB
33 Időlimit túllépés 3.066s 21652 KiB
34 Időlimit túllépés 3.066s 21548 KiB
35 Időlimit túllépés 3.049s 21480 KiB
36 Időlimit túllépés 3.033s 21548 KiB
37 Időlimit túllépés 3.053s 21588 KiB
38 Elfogadva 2.96s 40396 KiB
39 Futási hiba 1.315s 40264 KiB
40 Futási hiba 1.187s 40264 KiB