求调E
  • 板块学术版
  • 楼主Cute_M
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/10/19 21:42
  • 上次更新2024/10/19 23:52:56
查看原帖
求调E
1081188
Cute_M楼主2024/10/19 21:42
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
int n,k,bj[200001] = {0};
struct dyc{
	int a,b;
}a[200001];
bool cmp(dyc x,dyc y){
	return x.a<y.a;
}
map<int,int>mp;
int l[200001] = {0};
struct myj{
	int id,val;
}b[200001];
bool cmp2(myj x,myj y){
	return x.val>y.val;
}
signed main(){
	cin.tie();
	cout.tie();
	int T;
	cin>>T;
	while(T--){
		cin>>n>>k;
		mp.clear();
		for(int i = 1;i<=n;i++){
			l[i] = 0;
			cin>>a[i].a;
			bj[i] = 0;
		}
		l[n+1] = 0;
		for(int i = 1;i<=n;i++){
			cin>>a[i].b;
		}
		sort(a+1,a+1+n,cmp);
		for(int i = 1;i<=n;i++){
			b[i].id = i;
			b[i].val = a[i].b;
			
		}
		sort(b+1,b+1+n,cmp2);
		int ans = 0;
		for(int i = 1;i<=n;i++)mp[b[i].val] = i;
		for(int i = n;i>=n-k+1;i--){
			ans+=b[i].val;
		}
		int tag = n-k+1;
		l[n+1] = ans;
		for(int i = n;i>k;i--){
			//cout<<i<<" "<<tag<<endl;
			if(mp[a[i].b]>=tag){
				//cout<<"in!"<<endl;
				tag--;
				while(bj[tag]==1)tag--;
				l[i] = l[i+1]-a[i].b+b[tag].val;
			}else{
				l[i] = l[i+1];
				bj[mp[a[i].b]] = 1;
			}
		}
		int tans = 2000000000000000000;
		for(int i = k;i<=n;i++){
			tans = min(tans,a[i].a*l[i+1]);
		}
	}
	return 0;
}

https://atcoder.jp/contests/abc376/submissions/58985819

2024/10/19 21:42
加载中...