105612024-04-05 13:43:14111Az IKPC legerősebb csapatacpp17Hibás válasz 0/1001.082s6616 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{};
			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-y>a.first){
				a.first=b.first-y;
				a.second=b.second+1;
			}
			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{};
			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(b.first-y>=a.first){
				a.first=b.first-y;
				a.second=b.second+1;
			}
			return{a,b};
		};
		return dfs(dfs,0).first;
	};
	int ans=0;
	for(int i=0;i<200000;i++){
		auto[x,c]=solveMin(i);
		auto[x2,c2]=solveMax(i);
		if(x!=x2)exit(1);
		if(c<=K)ans=max(ans,x+min(K,c2)*i);
	}
	cout<<ans<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva20ms1760 KiB
2Elfogadva30ms1864 KiB
subtask20/9
3Elfogadva37ms1948 KiB
4Hibás válasz56ms2172 KiB
5Hibás válasz54ms2512 KiB
6Elfogadva54ms2600 KiB
7Elfogadva54ms2732 KiB
8Hibás válasz54ms2808 KiB
9Hibás válasz54ms2876 KiB
10Elfogadva68ms3004 KiB
11Hibás válasz59ms3108 KiB
12Hibás válasz54ms3108 KiB
subtask30/7
13Időlimit túllépés1.024s3452 KiB
14Időlimit túllépés1.041s3868 KiB
15Időlimit túllépés1.049s3008 KiB
16Időlimit túllépés1.049s3944 KiB
17Időlimit túllépés1.057s3052 KiB
18Időlimit túllépés1.049s4208 KiB
19Időlimit túllépés1.052s4416 KiB
20Időlimit túllépés1.057s3380 KiB
21Időlimit túllépés1.057s3536 KiB
subtask40/11
22Időlimit túllépés1.057s6196 KiB
23Időlimit túllépés1.074s6216 KiB
24Időlimit túllépés1.074s6196 KiB
25Időlimit túllépés1.065s6284 KiB
26Időlimit túllépés1.074s6244 KiB
27Időlimit túllépés1.057s6380 KiB
subtask50/22
28Időlimit túllépés1.049s3372 KiB
29Időlimit túllépés1.072s4380 KiB
30Időlimit túllépés1.069s3380 KiB
31Időlimit túllépés1.049s3496 KiB
32Időlimit túllépés1.036s3492 KiB
33Időlimit túllépés1.077s3520 KiB
34Időlimit túllépés1.052s4476 KiB
subtask60/51
35Időlimit túllépés1.057s6328 KiB
36Időlimit túllépés1.069s6240 KiB
37Időlimit túllépés1.065s6376 KiB
38Időlimit túllépés1.074s6300 KiB
39Időlimit túllépés1.054s6392 KiB
40Időlimit túllépés1.062s6408 KiB
41Időlimit túllépés1.077s6596 KiB
42Időlimit túllépés1.065s6616 KiB
43Időlimit túllépés1.054s6572 KiB
44Időlimit túllépés1.065s6576 KiB
45Időlimit túllépés1.082s6516 KiB