#include<bits/stdc++.h>
using namespace std;
#define pb push_back
int main(){
int n,q;
cin>>n>>q;
int a[n],b[n];
vector<int>v;
for(int i=0;i<n;i++){
cin>>a[i]>>b[i];
v.pb(a[i]);
v.pb(b[i]);
}
sort(v.begin(),v.end());
v.resize(unique(v.begin(),v.end())-v.begin());
int m=v.size();
map<int,int>tr;
for(int i=0;i<m;i++){
tr[v[i]]=i;
}
int have1[m]{},have2[m]{};
for(int i=0;i<n;i++){
have1[a[i]=tr[a[i]]]++;
have2[b[i]=tr[b[i]]]++;
}
int mini1[m]{},maxi1[m]{},mini2[m]{},maxi2[m]{};
for(int i=0;i<m;i++){
mini1[i]=mini2[i]=INT_MAX;
}
for(int i=0;i<n;i++){
mini1[a[i]]=min(mini1[a[i]],b[i]);
maxi1[a[i]]=max(maxi1[a[i]],b[i]);
mini2[b[i]]=min(mini2[b[i]],a[i]);
maxi2[b[i]]=max(maxi2[b[i]],a[i]);
}
int mn1[m]{},mx1[m]{},mn2[m]{},mx2[m]{};
mn1[m-1]=mini1[m-1];
mx1[0]=maxi1[0];
mn2[m-1]=mini2[m-1];
mx2[0]=maxi2[0];
for(int i=1;i<m;i++){
mn1[m-i-1]=min(mini1[m-i-1],mn1[m-i]);
mx1[i]=min(maxi1[i],mx1[i-1]);
mn2[m-i-1]=min(mini2[m-i-1],mn2[m-i]);
mx2[i]=min(maxi2[i],mx2[i-1]);
}
sort(a,a+n);
sort(b,b+n);
for(int ind=1;ind<=q;ind++){
int x,y;
cin>>x>>y;
if(!tr.count(x)||!tr.count(y))continue;
x=tr[x],y=tr[y];
if(!have1[x]||!have2[y])continue;
if(have1[x]==1&&have2[y]==1&&mini1[x]==y){
int p1=lower_bound(a,a+n,x)-a;
int p2=lower_bound(b,b+n,y)-b;
int s1=n-(upper_bound(a,a+n,x)-a);
int s2=n-(upper_bound(b,b+n,y)-b);
if((p1==n-1&&s2==n-1)||(p2==n-1&&s1==n-1)){
}else{
cout<<ind<<' ';
}
continue;
}
if((mn1[x]<=y&&mn2[y]<=x)||(y<=mx1[x]&&x<=mx2[y])){
cout<<ind<<' ';
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |