103042024-03-30 13:18:50111Majomházcpp17Hibás válasz 20/1003.111s191372 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

#define INF (int)1e18

int pf[100001];

map<tuple<int,int,int>,int>mem;

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);
	}
	if(mem.find({s,e,k})!=mem.end()){
		return mem[{s,e,k}];
	}
	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));
	}
	mem[{s,e,k}]=res;
	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
1Elfogadva3ms1708 KiB
2Elfogadva1.277s116752 KiB
subtask210/10
3Elfogadva3ms2132 KiB
4Elfogadva3ms2344 KiB
5Elfogadva3ms2700 KiB
6Elfogadva3ms2904 KiB
7Elfogadva3ms2808 KiB
subtask310/10
8Elfogadva3ms3112 KiB
9Elfogadva10ms4132 KiB
10Elfogadva75ms8480 KiB
11Elfogadva319ms14560 KiB
12Elfogadva794ms20504 KiB
subtask40/20
13Elfogadva3ms3896 KiB
14Elfogadva4ms4056 KiB
15Hibás válasz45ms9588 KiB
16Időlimit túllépés3.062s111852 KiB
17Időlimit túllépés3.102s45408 KiB
18Időlimit túllépés3.065s31360 KiB
subtask50/29
19Elfogadva12ms5920 KiB
20Elfogadva435ms50444 KiB
21Időlimit túllépés3.094s174024 KiB
22Időlimit túllépés3.079s159148 KiB
23Időlimit túllépés3.062s115268 KiB
subtask60/31
24Elfogadva14ms7340 KiB
25Elfogadva14ms7228 KiB
26Elfogadva14ms7280 KiB
27Elfogadva16ms7232 KiB
28Hibás válasz17ms7660 KiB
29Hibás válasz19ms7852 KiB
30Elfogadva224ms31980 KiB
31Időlimit túllépés3.061s185832 KiB
32Időlimit túllépés3.111s191372 KiB
33Időlimit túllépés3.071s162468 KiB
34Időlimit túllépés3.078s156268 KiB
35Időlimit túllépés3.078s73312 KiB
36Időlimit túllépés3.078s31828 KiB
37Időlimit túllépés3.071s31604 KiB
38Időlimit túllépés3.078s35560 KiB
39Időlimit túllépés3.068s38372 KiB
40Időlimit túllépés3.075s47204 KiB