70ptsMLE求助
查看原帖
70ptsMLE求助
298231
Skylmt楼主2024/10/5 10:02
#include <bits/stdc++.h>
#define Max(a,b,c) max(a,max(b,c))
typedef long long ll;
using namespace std;
inline ll read() {
	ll x=0,f=1;
	char ch=getchar();
	while(!isdigit(ch)) {
		if (ch=='-')
			f=-1;
		ch=getchar();
	}
	while(isdigit(ch)) {
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
inline void write(ll x) {
	if(x<0) putchar('-'), x=-x;
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
#define fi first
#define se second
const int N=114514;

int n,m[2];

struct qwq {
	int co,le;
} a_0[N],a_1[N];

int ans[N][2];
int Ans=-1;

priority_queue<int> id[2];
priority_queue<pair<int,int> > tim[2];
bool cmp(qwq a,qwq b) {
	return a.co<b.co;
}

void in_it_0(int x) {
	for(int i=1; i<=n; i++) id[x].push(-i);
//	cout << "qwq" << endl;
	for(int i=1; i<=m[x]; i++) {
		if(!tim[x].empty()) {
			while(-tim[x].top().fi<a_0[i].co) {
//				cout << -tim[x].top().fi << " " << -tim[x].top().se;
				id[x].push(tim[x].top().se);
				tim[x].pop();
			}
			if(tim[x].empty()) break;
		}
		if(!id[x].empty()) {
			int idd=-id[x].top();
//			cout << idd << endl;
			id[x].pop();
			ans[idd][x]++;
			tim[x].push(make_pair(-a_0[i].le,-idd));
		}
	}
//	for(int i=1;i<=n;i++) cout << ans[i][x] << " ";
	for(int i=1; i<=n; i++) ans[i][x]+=ans[i-1][x];
}

void in_it_1(int x) {
	for(int i=1; i<=n; i++) id[x].push(-i);
//	cout << "qwq" << endl;
	for(int i=1; i<=m[x]; i++) {
		if(!tim[x].empty()) {
//			cout << -tim[x].top().fi << endl;
			while(-tim[x].top().fi<a_1[i].co) {
				id[x].push(tim[x].top().se);
				tim[x].pop();
			}
			if(tim[x].empty()) break;
		}
		if(!id[x].empty()) {
			int idd=-id[x].top();
			id[x].pop();
			ans[idd][x]++;
			tim[x].push(make_pair(-a_1[i].le,-idd));
		}
	}
	for(int i=1; i<=n; i++) ans[i][x]+=ans[i-1][x];
}

int main() {
//	freopen("airport.in","r",stdin);
//	freopen("airport.out","w",stdout);
	n=read(),m[0]=read(),m[1]=read();
	for(int i=1; i<=m[0]; i++) a_0[i].co=read(),a_0[i].le=read();
	for(int i=1; i<=m[1]; i++) a_1[i].co=read(),a_1[i].le=read();
	sort(a_0+1,a_0+m[0]+1,cmp);
	sort(a_1+1,a_1+m[1]+1,cmp);
//	cout << "qwq" << endl;
	in_it_0(0);
	in_it_1(1);
//	cout << ans[2][0] << " " << ans[1][1] << endl;
	for(int i=0; i<=n; i++) Ans=max(Ans,ans[i][0]+ans[n-i][1]);
	write(Ans);
	return 0;
}
2024/10/5 10:02
加载中...