103032024-03-30 13:14:39111Majomházcpp17Időlimit túllépés 10/1003.099s6800 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

#define INF (int)1e18

int pf[5001],dp[5001][5001];

int cost(int s,int e){
	return (pf[e]-pf[s])*(e-s);
}

int solve(int s,int e,int k){
	if(k==0){
		return cost(s,e);
	}
	int k1=k/2,k2=(k-1)/2;
	auto calc=[&](int i)->int{
		return solve(s,i,k1)+solve(i,e,k2);
	};
	int l=s+k1+1,h=e-k2-1;
	while(h-l>=3){
		int m1=l+(h-l)/3;
		int m2=h-(h-l)/3;
		if(calc(m1)<=calc(m2)){
			h=m2;
		}
		else{
			l=m1;
		}
	}
	int res=INF;
	for(int i=l;i<=h;i++){
		res=min(res,calc(i));
	}
	return res;
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N,K;
	cin>>N>>K;
	vector<int>v(N);
	for(int i=0;i<N;i++){
		cin>>v[i];
	}
	for(int i=0;i<N;i++){
		pf[i+1]=pf[i]+v[i];
	}
	cout<<solve(0,N,K)<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1840 KiB
2Időlimit túllépés3.099s1436 KiB
subtask210/10
3Elfogadva3ms2268 KiB
4Elfogadva3ms2392 KiB
5Elfogadva3ms2720 KiB
6Elfogadva2ms2612 KiB
7Elfogadva3ms2608 KiB
subtask30/10
8Elfogadva3ms2620 KiB
9Elfogadva19ms2632 KiB
10Elfogadva574ms2628 KiB
11Időlimit túllépés3.076s2864 KiB
12Időlimit túllépés3.052s3196 KiB
subtask40/20
13Elfogadva3ms3376 KiB
14Elfogadva4ms3336 KiB
15Hibás válasz72ms3464 KiB
16Időlimit túllépés3.056s3444 KiB
17Időlimit túllépés3.076s3340 KiB
18Időlimit túllépés3.072s2552 KiB
subtask50/29
19Futási hiba8ms4236 KiB
20Futási hiba8ms4484 KiB
21Futási hiba8ms4512 KiB
22Futási hiba8ms4508 KiB
23Futási hiba8ms4508 KiB
subtask60/31
24Futási hiba14ms5508 KiB
25Futási hiba14ms5752 KiB
26Futási hiba14ms5956 KiB
27Futási hiba14ms6244 KiB
28Futási hiba14ms6128 KiB
29Futási hiba14ms6416 KiB
30Futási hiba14ms6676 KiB
31Futási hiba14ms6504 KiB
32Futási hiba14ms6396 KiB
33Futási hiba14ms6400 KiB
34Futási hiba14ms6396 KiB
35Futási hiba14ms6672 KiB
36Futási hiba14ms6508 KiB
37Futási hiba14ms6512 KiB
38Futási hiba14ms6512 KiB
39Futási hiba14ms6636 KiB
40Futási hiba14ms6800 KiB