P2471
不过样例求调QAQ
#include<bits/stdc++.h>
using namespace std;
long long n,f[50010][20],power[50010],x,y,pd1,pd2,m,l,r,mid,qx,qy;
struct node{
long long pos,val;
}a[50010];
long long ans(long long qx,long long qy){
long long len=power[qy-qx+1];
return max(f[qx][len],f[qy-(1<<len)+1][len]);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].pos>>a[i].val;
}
for(int i=1;i<=n;i++){
f[i][0]=a[i].val;
}
for(int i=2;i<=n;i++){
power[i]=power[i/2]+1;
}
for(int j=1;(1<<j)<=n;j++){
for(int i=1;i<=n;i++){
if(i+(1<<j)-1>n){
break;
}
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>y>>x;
if(x<=y){
cout<<"false"<<endl;
continue;
}
pd1=0;
pd2=0;
l=1;
r=n;
while(l<=r){
mid=(l+r)/2;
if(x>=a[mid].pos){
if(x==a[mid].pos){
pd1=1;
}
qx=mid;
l=mid+1;
}else{
r=mid-1;
}
}
l=1;
r=n;
while(l<=r){
mid=(l+r)/2;
if(y>=a[mid].pos){
if(y==a[mid].pos){
pd2=1;
}
qy=mid;
l=mid+1;
}else{
r=mid-1;
}
}
if(pd1==1&&pd2==1&&a[qy].val>=a[qx].val){
cout<<"false"<<endl;
continue;
}
if(pd1==1&&pd2==0&&max(qx+1,qy-1)>=a[qx].val){
cout<<"false"<<endl;
continue;
}
if(pd1==0&&pd2==1&&max(qx,qy-1)>=a[qy].val){
cout<<"false"<<endl;
continue;
}
if(qy-qx+1!=x-y+1){
cout<<"maybe"<<endl;
continue;
}
if(pd1==0){
cout<<"maybe"<<endl;
continue;
}
if(pd2==0){
cout<<"maybe"<<endl;
continue;
}
cout<<"true"<<endl;
}
return 0;
}