95分求助
查看原帖
95分求助
647306
ColinKIA楼主2022/10/1 16:35

Wa #9

#include <bits/stdc++.h> 
using namespace std;
const int MAXN=1e5+5;
int n,m1,m2,ans1[MAXN],ans2[MAXN],ans;
struct node{
	int st,ed;
	friend bool operator < (node a,node b){
		return a.st<b.st;
	}
}plane[MAXN];
struct node1{
	int tim,id;
	friend bool operator > (node1 a,node1 b){
		return a.tim>b.tim;
	}
};
void solve(int m,int ans[]){
	memset(plane,0,sizeof plane);
	for(int i=1;i<=m;i++){
		scanf("%d %d",&plane[i].st,&plane[i].ed);
	}
	sort(plane+1,plane+1+m);
	priority_queue<int,vector<int>,greater<int> > q;
	priority_queue<node1,vector<node1>,greater<node1> >tmp;
	for(int i=1;i<=n;i++) q.push(i);
	for(int i=1;i<=m;i++){
		while(!tmp.empty()&&tmp.top().tim<plane[i].st){
			q.push(tmp.top().id);
			tmp.pop();
		}
		if(!q.empty()){
			++ans[q.top()];
			tmp.push((node1){plane[i].ed,q.top()});
			q.pop();
		}
	}
	ans[0]=0;
	for(int i=1;i<=m;i++){
		ans[i]+=ans[i-1];
	}
}
int main(){
	//freopen("sb.in","r",stdin);
	scanf("%d %d %d",&n,&m1,&m2);
	solve(m1,ans1);
	solve(m2,ans2);
	for(int i=0;i<=n;i++){
		ans=max(ans1[i]+ans2[n-i],ans);
	}
	printf("%d",ans);
}

2022/10/1 16:35
加载中...