105622024-04-05 13:55:34111Az IKPC legerősebb csapatacpp17Hibás válasz 0/100112ms10828 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

#define pii pair<int,int>

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N,K;
	cin>>N>>K;
	vector<int>v(N+1),w(N+1);
	for(int i=1;i<=N;i++){
		cin>>v[i];
	}
	for(int i=1;i<=N;i++){
		cin>>w[i];
	}
	vector<vector<int>>g(N+1);
	vector<int>s;
	for(int i=N;i>=1;i--){
		while(!s.empty()&&v[s.back()]<=v[i]){
			s.pop_back();
		}
		g[s.empty()?0:s.back()].push_back(i);
		s.push_back(i);
	}
	auto solveMin=[&](int y)->pii{
		auto dfs=[&](auto self,int i)->pair<pii,pii>{
			pii a{},b{-y,1};
			for(int j:g[i]){
				auto [p,q]=self(self,j);
				a.first+=p.first;
				a.second+=p.second;
				if(q.first-p.first>b.first){
					b.first=q.first-p.first;
					b.second=q.second-p.second;
				}
			}
			b.first+=a.first+w[i];
			b.second+=a.second;
			if(w[i]>y){
				a.first+=w[i]-y;
				a.second++;
			}
			if(b.first>a.first){
				a.first=b.first;
				a.second=b.second;
			}
			return{a,b};
		};
		return dfs(dfs,0).first;
	};
	auto solveMax=[&](int y)->pii{
		auto dfs=[&](auto self,int i)->pair<pii,pii>{
			pii a{},b{-y,1};
			for(int j:g[i]){
				auto [p,q]=self(self,j);
				a.first+=p.first;
				a.second+=p.second;
				if(q.first-p.first>b.first||q.first-p.first==b.first&&q.second-p.second>b.second){
					b.first=q.first-p.first;
					b.second=q.second-p.second;
				}
			}
			b.first+=a.first+w[i];
			b.second+=a.second;
			if(w[i]>=y){
				a.first+=w[i]-y;
				a.second++;
			}
			if(b.first>=a.first){
				a.first=b.first;
				a.second=b.second;
			}
			return{a,b};
		};
		return dfs(dfs,0).first;
	};
	int l=0,h=1e16;
	while(l<h){
		int m=(l+h)/2;
		auto[x,c]=solveMin(m);
		if(c<=K){
			h=m;
		}
		else{
			l=m+1;
		}
	}
	auto[x,c]=solveMax(h);
	cout<<x+min(c,K)*h<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1824 KiB
2Elfogadva3ms2024 KiB
subtask20/9
3Elfogadva3ms2252 KiB
4Hibás válasz3ms2440 KiB
5Hibás válasz3ms2672 KiB
6Elfogadva2ms2740 KiB
7Elfogadva3ms3140 KiB
8Hibás válasz3ms3096 KiB
9Hibás válasz3ms3464 KiB
10Elfogadva3ms3480 KiB
11Hibás válasz3ms3576 KiB
12Hibás válasz3ms3688 KiB
subtask30/7
13Elfogadva4ms4076 KiB
14Elfogadva4ms4284 KiB
15Hibás válasz6ms4488 KiB
16Elfogadva6ms4488 KiB
17Elfogadva6ms4376 KiB
18Elfogadva7ms4624 KiB
19Elfogadva7ms4636 KiB
20Elfogadva7ms4804 KiB
21Elfogadva8ms4876 KiB
subtask40/11
22Elfogadva92ms9864 KiB
23Elfogadva90ms10088 KiB
24Elfogadva90ms10164 KiB
25Elfogadva90ms10160 KiB
26Hibás válasz100ms10312 KiB
27Elfogadva101ms10288 KiB
subtask50/22
28Elfogadva7ms4864 KiB
29Elfogadva7ms4892 KiB
30Elfogadva7ms4892 KiB
31Hibás válasz7ms4848 KiB
32Elfogadva7ms4844 KiB
33Hibás válasz8ms4844 KiB
34Hibás válasz6ms4840 KiB
subtask60/51
35Elfogadva103ms10196 KiB
36Elfogadva103ms10200 KiB
37Hibás válasz105ms10280 KiB
38Elfogadva108ms10520 KiB
39Elfogadva108ms10492 KiB
40Elfogadva112ms10488 KiB
41Hibás válasz82ms10492 KiB
42Elfogadva93ms10596 KiB
43Elfogadva101ms10700 KiB
44Elfogadva93ms10700 KiB
45Elfogadva93ms10828 KiB