#1236 AC 其余 WA 求助
  • 板块P1752 点菜
  • 楼主蒟酱厂妹
  • 当前回复12
  • 已保存回复12
  • 发布时间2023/7/20 09:59
  • 上次更新2023/11/3 08:43:47
查看原帖
#1236 AC 其余 WA 求助
310818
蒟酱厂妹楼主2023/7/20 09:59
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cassert>
#include<ctime>
#include<random>
#include<queue>
#if __cplusplus>=202002L
#include<ranges>
namespace vw=std::views;
#endif
#define siz(x) int((x).size())
#define cauto const auto
#define elif else if
#define all(x) std::begin(x),std::end(x)
#define rall(x) std::rbegin(x),std::rend(x)
#define fi first
#define se second
#define continue(x...) {x;continue;}
#define break(x...) {x;break;}
#define debug(x) #x" "<<(x)
using std::cin;using std::cout;
using std::max;using std::min;
using std::cerr;using std::clog;
using unt=unsigned;
using loli=long long;
using lolu=unsigned long long;
using pii=std::pair<int,int>;
using tiii=std::tuple<int,int,int>;
using bsi=std::basic_string<int>;
using bsc=std::string;
#if __cplusplus>=201402L
using std::operator""s;
#endif
#if __SIZEOF_POINTER__>=8
using venti=__int128_t;
using ventu=__uint128_t;
constexpr venti operator""_vt(lolu x){return venti(x);}
constexpr ventu operator""_uvt(lolu x){return ventu(x);}
#endif
template<typename T1,typename T2>constexpr T1&cmin(T1&x,T2&&y){if(y<x)x=y;return x;}
template<typename T1,typename T2>constexpr T1&cmax(T1&x,T2&&y){if(x<y)x=y;return x;}
template<typename T1,typename T2,typename...args>constexpr T1&cmin(T1&x,T2&&y,args&&...z){if(y<x)x=y;return cmin(x,std::forward<args>(z)...);}
template<typename T1,typename T2,typename...args>constexpr T1&cmax(T1&x,T2&&y,args&&...z){if(x<y)x=y;return cmax(x,std::forward<args>(z)...);}
template<typename T1,typename T2>constexpr T1 ceil(T1 x,T2 y){return x>0?(x+y-1)/y:x/y;}
template<typename T1,typename T2>constexpr T1 flor(T1 x,T2 y){return x>0?x/y:(x-y+1)/y;}
template<typename T>constexpr T&STLcls(T &x){T{}.swap(x);return x;}
[[maybe_unused]]struct{template<typename T>operator T(){T y;cin>>y;return y;}}tin;
struct _time{~_time(){cerr<<"\n\033[33;40m"<<1.*clock()/CLOCKS_PER_SEC<<"s\033[37;40m";}}_TM;
std::mt19937_64 rng(std::random_device{}());
constexpr int N=50001,M=200001;
int n,m,p,q,b[N],c[N];
pii a[M];
std::vector<pii>ans;
std::priority_queue<pii,std::vector<pii>,decltype([](pii&x,pii&y){
	return x.se<y.se;
})>Q;
bool check(int x){
	ans.clear();
	loli o=1ll*(n-p-q)*x;
	if(m<=o)return true;
	int k=1;
	for(int i=1;i<=p;i++){
		while(k<=m&&a[k].fi>=b[i])
			Q.push(a[k++]);
		for(int j=1;!Q.empty()&&j<=x;j++)
			Q.pop();
	}
	for(;!Q.empty();Q.pop())ans.push_back(Q.top());
	for(;k<=m;k++)ans.push_back(a[k]);
	sort(all(ans),[](pii&x,pii&y){
		return x.se<y.se;
	});
	auto it=ans.begin();
	for(int i=1;i<=q;i++)
		for(int j=1;j<=x&&it!=ans.end()&&it->se<=c[i];j++,it++);
	if(ans.end()-it>o)return false;
	return true;
}
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	std::ios::sync_with_stdio(false);cin.tie(nullptr);
	cin>>n>>m>>p>>q;
	for(int i=1;i<=m;i++)cin>>a[i].fi>>a[i].se;
	for(int i=1;i<=p;i++)cin>>b[i];
	for(int i=1;i<=q;i++)cin>>c[i];
	sort(a+1,a+1+n,std::greater<>{});
	sort(b+1,b+1+p,std::greater<>{});
	std::sort(c+1,c+1+q);
	int l=1,r=m,ans=-1,mid;
	while(l<=r){
		if(check(mid=(l+r)/2))ans=mid,r=mid-1;
		else l=mid+1;
	}
	cout<<ans;
	return 0;
}

另外本题数据好水啊,这四个点我乱改都能过。

2023/7/20 09:59
加载中...