105532024-04-05 13:02:01111Az IKPC legerősebb csapatacpp17Hibás válasz 0/100114ms10276 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 solve=[&](int y)->pii{
		auto dfs=[&](auto self,int i)->pair<pii,pii>{
			pii a{},b{},c{};
			for(int j:g[i]){
				auto [p,q]=self(self,j);
				a.first+=p.first;
				a.second+=p.second;
				if(q.first>b.first){
					b=q;
					c=p;
				}
			}
			b.first+=a.first-c.first+w[i];
			b.second+=a.second-c.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;
	};
	int l=0,h=1e16;
	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+K*h<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva3ms2056 KiB
subtask20/9
3Elfogadva3ms2240 KiB
4Hibás válasz3ms2480 KiB
5Hibás válasz3ms2548 KiB
6Elfogadva3ms2660 KiB
7Elfogadva3ms2868 KiB
8Hibás válasz3ms3092 KiB
9Hibás válasz3ms3180 KiB
10Elfogadva3ms3288 KiB
11Hibás válasz2ms3380 KiB
12Hibás válasz2ms3376 KiB
subtask30/7
13Hibás válasz3ms3432 KiB
14Elfogadva4ms3656 KiB
15Elfogadva6ms3988 KiB
16Hibás válasz6ms3896 KiB
17Hibás válasz6ms3944 KiB
18Elfogadva6ms3948 KiB
19Elfogadva7ms3988 KiB
20Elfogadva7ms4164 KiB
21Hibás válasz8ms4404 KiB
subtask40/11
22Hibás válasz93ms9548 KiB
23Hibás válasz90ms9540 KiB
24Elfogadva92ms9524 KiB
25Hibás válasz93ms9520 KiB
26Elfogadva97ms9520 KiB
27Elfogadva105ms9760 KiB
subtask50/22
28Hibás válasz7ms4424 KiB
29Hibás válasz7ms4424 KiB
30Hibás válasz7ms4432 KiB
31Hibás válasz7ms4688 KiB
32Hibás válasz7ms4644 KiB
33Hibás válasz8ms4644 KiB
34Hibás válasz6ms4644 KiB
subtask60/51
35Hibás válasz101ms9956 KiB
36Hibás válasz101ms10084 KiB
37Hibás válasz104ms10164 KiB
38Hibás válasz104ms10168 KiB
39Hibás válasz107ms10168 KiB
40Hibás válasz114ms10168 KiB
41Hibás válasz83ms10272 KiB
42Hibás válasz97ms10272 KiB
43Elfogadva105ms10164 KiB
44Hibás válasz97ms10168 KiB
45Hibás válasz97ms10276 KiB