悬棺求调教代码!(15pts)
查看原帖
悬棺求调教代码!(15pts)
1125685
Frielen楼主2024/10/25 18:42
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+9;
struct Node{
	int start,ed;
};
Node a[N],b[N];
int n,m,q,ans1[N],ans2[N],ans;
bool cmp(Node a,Node b){
	return a.start<b.start;
}
void change(Node k[],int res[],int s){
	priority_queue<int,vector<int>, greater<int>>can;
	priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>wait;/*1:end,2:lq*/
	for(int i=1;i<=n;i++) can.push(i);
	for(int i=1;i<=s;i++){
		while(!wait.empty()&&k[i].start>=wait.top().first){
			can.push(wait.top().second);
			wait.pop();
		}
		if(can.empty()) continue;
		int lq=can.top();
		can.pop();
		res[lq]++;
		wait.push(make_pair(k[lq].ed,lq));
	}
	for(int i=1;i<=n;i++) res[i]+=res[i-1];
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.flush();
	cin>>n>>m>>q;
	for(int i=1;i<=m;i++) cin>>a[i].start>>a[i].ed;
	for(int i=1;i<=q;i++) cin>>b[i].start>>b[i].ed;
	sort(a+1,a+m+1,cmp);
	sort(b+1,b+q+1,cmp);
	change(a,ans1,m);
	change(b,ans2,q);
	for(int i=0;i<=n;i++) ans=max(ans,ans1[i]+ans2[n-i]);
	cout<<ans;
	return 0;
}
2024/10/25 18:42
加载中...