AC
2025-10-18 21:58:25
发布于:北京
15阅读
0回复
0点赞
存堆
#include <bits/stdc++.h>
using namespace std;
priority_queue<int,vector<int>,greater<int>>q;
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>t;
int n,m1,m2,cnt1[100010],cnt2[100010],ans1[100010],ans2[100010],mx;
pair<int,int> a[100010];
pair<int,int> b[100010];
bool cmp(pair<int,int>a,pair<int,int>b){
if(a.first==b.first) return a.second<b.second;
return a.first<b.first;
}
int main(){
cin>>n>>m1>>m2;
for(int i=1;i<=m1;i++){
int x,y;
cin>>x>>y;
a[i].first=x,a[i].second=y;
q.push(i);
}
sort(a+1,a+m1+1,cmp);
for(int i=1;i<=m1;i++){
while(!t.empty()&&t.top().first<a[i].first){
q.push(t.top().second);
t.pop();
}
cnt1[q.top()]++;
t.push({a[i].second,q.top()});
q.pop();
}
while(q.size()) q.pop();
while(t.size()) t.pop();
for(int i=1;i<=m2;i++){
int x,y;
cin>>x>>y;
b[i].first=x,b[i].second=y;
q.push(i);
}
sort(b+1,b+m2+1,cmp);
for(int i=1;i<=m2;i++){
while(!t.empty()&&t.top().first<b[i].first){
q.push(t.top().second);
t.pop();
}
cnt2[q.top()]++;
t.push({b[i].second,q.top()});
q.pop();
}
for(int i=1;i<=n;i++){
ans1[i]=ans1[i-1]+cnt1[i];
}
for(int i=1;i<=n;i++){
ans2[i]=ans2[i-1]+cnt2[i];
}
for(int i=0;i<=n;i++){
mx=max(mx,ans2[n-i]+ans1[i]);
}
cout<<mx;
return 0;
}
这里空空如也






有帮助,赞一个