105542024-04-05 13:03:21111Az IKPC legerősebb csapatacpp17Hibás válasz 0/100114ms10312 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
1Elfogadva3ms1824 KiB
2Elfogadva3ms2060 KiB
subtask20/9
3Elfogadva3ms2268 KiB
4Hibás válasz3ms2496 KiB
5Hibás válasz3ms2656 KiB
6Elfogadva3ms2864 KiB
7Elfogadva3ms2952 KiB
8Hibás válasz3ms2952 KiB
9Hibás válasz3ms2956 KiB
10Elfogadva3ms2964 KiB
11Hibás válasz3ms3108 KiB
12Hibás válasz3ms3092 KiB
subtask30/7
13Hibás válasz3ms3224 KiB
14Elfogadva4ms3584 KiB
15Elfogadva6ms3732 KiB
16Hibás válasz6ms3704 KiB
17Hibás válasz7ms4004 KiB
18Elfogadva6ms4000 KiB
19Elfogadva7ms4220 KiB
20Elfogadva7ms4420 KiB
21Hibás válasz8ms4572 KiB
subtask40/11
22Hibás válasz92ms9776 KiB
23Hibás válasz90ms9860 KiB
24Elfogadva93ms9968 KiB
25Hibás válasz93ms10196 KiB
26Elfogadva98ms10280 KiB
27Elfogadva104ms10172 KiB
subtask50/22
28Hibás válasz7ms4888 KiB
29Hibás válasz7ms4860 KiB
30Hibás válasz7ms4864 KiB
31Hibás válasz7ms4864 KiB
32Hibás válasz7ms4864 KiB
33Hibás válasz8ms4872 KiB
34Hibás válasz6ms4904 KiB
subtask60/51
35Hibás válasz103ms10212 KiB
36Hibás válasz101ms10312 KiB
37Hibás válasz104ms10288 KiB
38Hibás válasz105ms10176 KiB
39Hibás válasz107ms10196 KiB
40Hibás válasz114ms10200 KiB
41Hibás válasz85ms10284 KiB
42Hibás válasz97ms10308 KiB
43Elfogadva104ms10176 KiB
44Hibás válasz97ms10180 KiB
45Hibás válasz97ms10292 KiB