代码很好理解的:
#include<bits/stdc++.h>
using namespace std;
int n,m,p,q,ex[50010],ch[50010],ans,be[200010],pr[200010];
struct Food1{
int k,be;
} food1[200010];
struct Food2{
int k,pr;
} food2[200010];
bool vis[200010];
bool cmp1(Food1 a,Food1 b){
return a.be<b.be;
}
bool cmp2(Food2 a,Food2 b){
return a.pr<b.pr;
}
int main(){
scanf("%d%d%d%d",&n,&m,&p,&q);
for(int i=1;i<=m;i++){
scanf("%d%d",&food1[i].be,&food2[i].pr);
food1[i].k=food2[i].k=i;
}
sort(food1+1,food1+m+1,cmp1);
for(int i=1;i<=m;i++) be[i]=food1[i].be;
sort(food2+1,food2+m+1,cmp2);
for(int i=1;i<=m;i++) pr[i]=food2[i].pr;
for(int i=1;i<=p;i++) scanf("%d",&ex[i]);
for(int i=1;i<=q;i++) scanf("%d",&ch[i]);
sort(ex+1,ex+p+1);
sort(ch+1,ch+q+1);
int s=0;
while(s<m){
ans++;
for(int i=1;i<=p;i++){
int t=lower_bound(be+1,be+m+1,ex[i])-be;
while(t<=m&&vis[food1[t].k]) t++;
if(t<=m) vis[food1[t].k]=1,s++;
}
for(int i=1;i<=q;i++){
int t=upper_bound(pr+1,pr+m+1,ch[i])-pr-1;
while(t>=1&&vis[food2[t].k]) t--;
if(t>=1) vis[food2[t].k]=1,s++;
}
s+=n-p-q;
if(ans>m){
printf("-1");
return 0;
}
}
printf("%d",ans);
return 0;
}
TLE是肯定的,但是至于WA是怎么回事?