RT
一个玄学骗分做法,截止10/25 20:30A掉了民间数据,建议加强
https://www.luogu.com.cn/record/60942772
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define fox(i,s,e) for(int i=(s);i<=(e);++i)
using namespace std;
struct event{
int t,code;
bool type;
};
int n,ma,mb,acnt=0,bcnt=0;
event a[200005],b[200005];
bool idle[100005];
bool cmp(event ea,event eb){
return ea.t<eb.t?true:false;
}
inline int check(int nas){
int nbs=n-nas;
int ans=0;
//cout<<nas<<" "<<nbs<<endl;
fox(i,1,acnt){
if(a[i].type==true){
if(nas>0){
--nas;
++ans;
}
else{
idle[a[i].code]=true;
}
}
else if(idle[a[i].code]==false) ++nas;
else idle[a[i].code]=false;
}
fox(i,1,bcnt){
if(b[i].type==true){
if(nbs>0){
--nbs;
++ans;
}
else{
idle[b[i].code]=true;
}
}
else if(idle[b[i].code]==false) ++nbs;
else idle[b[i].code]=false;
}
return ans;
}
int main(){
cin>>n>>ma>>mb;
memset(idle,false,sizeof(idle));
fox(i,1,ma){
cin>>a[++acnt].t;
a[acnt].type=true;
a[acnt].code=i;
cin>>a[++acnt].t;
a[acnt].type=false;
a[acnt].code=i;
}
fox(i,1,mb){
cin>>b[++bcnt].t;
b[bcnt].type=true;
b[bcnt].code=i;
cin>>b[++bcnt].t;
b[bcnt].type=false;
b[bcnt].code=i;
}
sort(a+1,a+acnt+1,cmp),sort(b+1,b+bcnt+1,cmp);
int l=0,r=n,ansmax=0;
int midl,midr;
while(r-l>1000){
midl=l+(r-l)/3;
midr=r-(r-l)/3;
if(check(midl)>check(midr)){
r=midr;
}
else{
l=midl;
}
}
fox(i,l,r){
if(check(i)>ansmax)ansmax=check(i);
}
cout<< ansmax << endl;
}