☞坤宁

发布时间 2023-12-19 21:43:17作者: 卡布叻_周深
#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;
	}
}