求助,O(mn)为啥能过
查看原帖
求助,O(mn)为啥能过
93639
追梦的黑旋风楼主2021/10/23 23:13

rt:

//made by forforever10 2021/10/23  2021csp rp++
//O(mn)算法 40pts 
#include<bits/stdc++.h>
using namespace std;
const int maxn=100050;
#define ll long long
ll n,m1,m2;
struct node{
	ll a,b;
}gn[maxn],gw[maxn];
ll qj1[maxn][2],qj2[maxn][2];
ll ans;
ll cnt1,cnt2;
bool cmp(node w,node k){
	return w.a<k.a;
}
int main()
{
	//freopen("airport.in","r",stdin);
	//freopen("airport.out","w",stdout);
	scanf("%lld%lld%lld",&n,&m1,&m2);
	for(ll i=1;i<=m1;i++) scanf("%lld%lld",&gn[i].a,&gn[i].b);
	for(ll i=1;i<=m2;i++) scanf("%lld%lld",&gw[i].a,&gw[i].b);
	sort(gn+1,gn+m1+1,cmp);
	sort(gw+1,gw+m2+1,cmp);
	/*for(ll i=1;i<=m1;i++){
		printf("%lld %lld\n",gn[i].a,gn[i].b);
	}*/
	for(ll i=1;i<=m1;i++){
		for(ll j=1;j<=n;j++){
			if(gn[i].a>qj1[j][2]){
				qj1[j][2]=gn[i].b;
				qj1[j][1]++;
				//printf("*%lld %lld*",qj1[j][1],qj1[j][2]);
				break;
			}
		}
	}
	for(ll i=1;i<=m2;i++){
		for(ll j=1;j<=n;j++){
			if(gw[i].a>qj2[j][2]){
				qj2[j][2]=gw[i].b;
				qj2[j][1]++;
				break;
			}
		}
	}
	for(ll i=1;i<=n;i++) qj1[i][1]+=qj1[i-1][1];
	for(ll i=1;i<=n;i++) qj2[i][1]+=qj2[i-1][1];
	for(ll i=0;i<=n;i++){
		ans=max(qj1[i][1]+qj2[n-i][1],ans);
	}
	printf("%lld",ans);
	return 0;
} 
2021/10/23 23:13
加载中...