103242024-03-30 21:09:02111Majomházcpp17Futási hiba 0/1003.101s40396 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Futási hiba3ms1936 KiB
2Elfogadva163ms3548 KiB
subtask20/10
3Futási hiba3ms2212 KiB
4Elfogadva3ms2364 KiB
5Elfogadva3ms2576 KiB
6Elfogadva3ms2660 KiB
7Futási hiba3ms2512 KiB
subtask30/10
8Elfogadva13ms2860 KiB
9Elfogadva14ms3072 KiB
10Elfogadva13ms3024 KiB
11Futási hiba4ms3392 KiB
12Futási hiba4ms3596 KiB
subtask40/20
13Elfogadva153ms4832 KiB
14Elfogadva178ms5260 KiB
15Elfogadva188ms5276 KiB
16Elfogadva179ms5616 KiB
17Elfogadva159ms5476 KiB
18Futási hiba41ms5648 KiB
subtask50/29
19Hibás válasz2.565s21736 KiB
20Hibás válasz2.569s21848 KiB
21Elfogadva2.559s21696 KiB
22Elfogadva2.397s22100 KiB
23Elfogadva2.223s22036 KiB
subtask60/31
24Időlimit túllépés3.062s21788 KiB
25Időlimit túllépés3.068s21888 KiB
26Időlimit túllépés3.062s21652 KiB
27Időlimit túllépés3.065s21728 KiB
28Időlimit túllépés3.075s21860 KiB
29Időlimit túllépés3.101s21976 KiB
30Időlimit túllépés3.073s21848 KiB
31Időlimit túllépés3.075s21780 KiB
32Időlimit túllépés3.071s21976 KiB
33Időlimit túllépés3.066s21652 KiB
34Időlimit túllépés3.066s21548 KiB
35Időlimit túllépés3.049s21480 KiB
36Időlimit túllépés3.033s21548 KiB
37Időlimit túllépés3.053s21588 KiB
38Elfogadva2.96s40396 KiB
39Futási hiba1.315s40264 KiB
40Futási hiba1.187s40264 KiB