大神9我,才4A6W
  • 板块P1752 点菜
  • 楼主封禁用户
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/5/29 22:24
  • 上次更新2023/10/28 00:18:28
查看原帖
大神9我,才4A6W
472950
封禁用户楼主2022/5/29 22:24
#include<bits/stdc++.h>
#define maxn 50005
#define maxm 200005
#define int long long
#define F(_i,_j,_k) for(int _i=_j;_i<=_k;_i++)
#define AF(_i,_b) for(;_b;_i++)
#define W(_b) while(_b)
using namespace std;

struct veg{
	int grt,prc;
	bool operator<(const veg&C)const{
		return grt>C.grt;
	}
}a[maxm];

int n,m,p,q,b[maxn],c[maxn],L=0,R=maxm;

signed main(){
	cin>>n>>m>>p>>q;
	if(m==0){
		cout<<0;
		return 0;
	}
	F(i,1,m)cin>>a[i].grt>>a[i].prc;
	F(i,1,p)cin>>b[i];
	F(i,1,q)cin>>c[i];
	sort(a+1,a+m+1);
	sort(b+1,b+p+1);
	reverse(b+1,b+p+1);
	sort(c+1,c+q+1);
	reverse(c+1,c+p+1);
	W(L<R-1){
		int tot=1,mid=(L+R)/2,cnt=0;
		priority_queue<int>Z;
		F(i,1,m){
			AF(tot,tot<=p&&b[tot]>a[i].grt){
				F(o,1,mid){
					if(Z.empty())break;
					Z.pop();
				}
			}
			Z.push(a[i].prc);
		}
		AF(tot,tot<=p){
			F(o,1,mid){
				if(Z.empty())break;
				Z.pop();
			}
		}
		F(i,1,q){
			W(c[i]<Z.top()&&Z.size()>0){
				Z.pop();
				cnt++;
			}
			F(o,1,mid){
				if(Z.empty())break;
				Z.pop();
			}
		}
		if((n-p-q)*mid>=cnt+Z.size())R=mid;
		else L=mid;
	}
	if(R==maxm)cout<<-1;
	else cout<<R;
	return 0;
}
2022/5/29 22:24
加载中...