蒟蒻求助
查看原帖
蒟蒻求助
186954
aaac楼主2022/9/27 13:52
#include<bits/stdc++.h>
using namespace std;

int n,m1,m2;

inline int read()
{
	char ch=getchar();
	int f=1,s=0;
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
			f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		s=(s<<3)+(s<<1)+(ch^48);
		ch=getchar();
	}
	return f*s;
}

struct node{
	int reach,leave;
}national[100010],international[100010];

inline bool cmp(node x,node y)
{ 
	return x.reach<y.reach; 
}

void check(queue<int>& q,int& arrive)
{
	queue<int>p;
	while(!q.empty())
	{
		if(arrive<q.front())
			q.push(p.front());
		q.pop();
	}
	q=p;
}

int inter(int number)
{
	queue<int>q;
	int ans=0;
	for(int i=1;i<=m2;++i)
	{
		check(q,international[i].leave);
		if(q.size()<number)
		{
			q.push(international[i].leave);
			++ans;
		}
	}
	return ans;
}

int nation(int number)
{
	queue<int>q;
	int ans=0;
	for(int i=1;i<=m1;++i)
	{
		if(i==0)
			int j=0;
		check(q,national[i].leave);
		if(q.size()<number)
		{
			q.push(national[i].leave);
			++ans;
		}
	}
	return ans;
}

int main()
{
	n=read(),m1=read(),m2=read();
	for(int i=1;i<=m1;++i)
		national[i].reach=read(),national[i].leave=read();
	for(int i=1;i<=m2;++i)
		international[i].reach=read(),international[i].leave=read();
	sort(national+1,national+m1+1,cmp);
    sort(international+1,international+m2+1,cmp);
    int maxx=-1;
    for(int i=0;i<=n;++i)
    	maxx=max(maxx,inter(i)+nation(n-i));
    printf("%d\n",maxx);
	return 0;
}
/*
3 5 4
1 5
3 8
6 10
9 14
13 18
2 11
4 15
7 17
12 16
*/ 
2022/9/27 13:52
加载中...