rt,莫名RE
#include<bits/stdc++.h>
#define itn int
#define tin int
#define nit int
#define tni int
#define nti int
#define scnaf scanf
#define ptrinf printf
#define icn cin
#define cni cin
#define inc cin
#define nci cin
#define nic cin
#define cuot cout
#define ocut cout
#define fro for
#define true cout<<"true\n";continue;
#define false cout<<"false\n";continue;
#define maybe cout<<"maybe\n";continue;
using namespace std;
const int N=50005,maxn=15;
int n,m,f[maxn][N],r[N],y[N],Log[N],Y,X;
inline int RMQ(int x,int y)
{
if(x>y)return 0;
int l=Log[y-x+1];
return max(f[x][l],f[y-(1<<l)+1][l]);
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n;
Log[1]=0;
for(int i=2;i<=N;i++)Log[i]=Log[i>>1]+1;
for(int i=1;i<=n;i++)cin>>y[i]>>r[i];
for(int i=1;i<=n;i++)f[i][0]=r[i];
for(int j=1;j<=Log[n];j++)
{
for(int i=1;i+(1<<j)-1<=n;i++)
{
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;
int p1=lower_bound(y+1,y+n+1,Y)-y;
int p2=lower_bound(y+1,y+n+1,X)-y;
bool f1=(p1==n+1||y[p1]!=Y)?0:1;
bool f2=(p2==n+1||y[p2]!=X)?0:1;
if(!f1&&!f2){maybe}
if(f1&&f2)
{
if(r[p1]<r[p2]){false}
if(Y+1==X){true}
if(p1+1==p2){maybe}
int maxx=RMQ(p1+1,p2-1);
if(maxx>=r[p2]){false}
if(p2-p1==X-Y){true}
else maybe
}
else if(f1){
if(p1+1==p2){maybe}
int maxx=RMQ(p1+1,p2-1);
if(maxx>=r[p1]){false}
else maybe
}
else{
if(p1==p2){maybe}
int maxx=RMQ(p1,p2-1);
if(maxx>=r[p2]){false}
else maybe
}
}
return 0;
}
是某一篇题解的思路