#include<bits/stdc++.h>
#define endl "\n"
#define f t[p]
#define ls p<<1
#define rs p<<1|1
using namespace std;
int n,m,h[50001];
map<int,int>v;
struct aa
{
int l,r,max;
}t[200001];
void build(int p,int l,int r)
{
f.l=l,f.r=r;
if(l==r)
{
f.max=h[l];
return ;
}
int mid=(l+r)>>1;
build(ls,l,mid),build(rs,mid+1,r);
f.max=max(t[ls].max,t[rs].max);
}
int ask(int p,int l,int r)
{
int res=-1;
if(l<=f.l&&r>=f.r) return f.max;
int mid=(f.l+f.r)>>1;
if(l<=mid) res=max(res,ask(ls,l,r));
if(r>mid) res=max(res,ask(rs,l,r));
return res;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int y;
cin>>y>>h[i];
v[y]=i;
}
build(1,1,n);
cin>>m;
while(m--)
{
int x,y;
cin>>x>>y;
bool flag=0;
if(v.find(x)==v.end()&&v.find(y)==v.end())
{
cout<<"maybe"<<endl;
continue;
}
else if(v.find(x)==v.end())
{
flag=1;
while(v.find(x)==v.end()&&x<=y) x++;
if(x==y||v[x]>v[y]-1)
{
cout<<"maybe"<<endl;
continue;
}
if(ask(1,v[x],v[y]-1)>=h[v[y]])
{
cout<<"false"<<endl;
continue;
}
}
else if(v.find(y)==v.end())
{
flag=1;
while(v.find(y)==v.end()&&x<=y) y--;
if(x==y||v[x]+1>v[y])
{
cout<<"maybe"<<endl;
continue;
}
if(ask(1,v[x]+1,v[y])>=h[v[x]])
{
cout<<"false"<<endl;
continue;
}
}
else
{
if(h[v[x]]<h[v[y]])
{
cout<<"false"<<endl;
continue;
}
if(y-x==1)
{
cout<<"true"<<endl;
continue;
}
if(v[x]+1>v[y]-1)
{
cout<<"maybe"<<endl;
continue;
}
if(ask(1,v[x]+1,v[y]-1)>=h[v[y]])
{
cout<<"false"<<endl;
continue;
}
if(v[y]-v[x]<y-x) flag=1;
}
if(flag) cout<<"maybe"<<endl;
else cout<<"true"<<endl;
}
}
☞坤宁
发布时间 2023-12-19 21:43:17作者: 卡布叻_周深