按照第二篇题解的思路用st求区间最大值为什么会WA,RE。。。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline ll read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
ll lg[500005],st[500005][30],b[500005];
void make_log(int n){
for(int i=1;i<=n;i++){
lg[i]=lg[i-1]+((1<<lg[i-1])==i);
}
}
ll query(ll x,ll y){
int k=lg[y-x+1]-1;
return max(st[x][k],st[y-(1<<k)+1][k]);
}
map<ll,ll>mp;
int main(){
ll n=read();
for(ll i=1;i<=n;i++){
mp[read()]=i;
st[i][0]=b[i]=read();
}
for(ll j=1;j<=30;j++){
for(int i=1;i+(1<<j)-1<=n;i++){
st[i][j]=max(st[i][j-1],st[i+(1<<j-1)][j-1]);
}
}
make_log(n);
int q=read();
for(ll i=1;i<=q;i++){
ll y=read(),x=read();
//cout<<b[mp[x]]<<" "<<b[mp[y]]<<" "<<query(mp[y]+1,mp[x]-1)<<endl;
if(y>=x) printf("false\n");
else if(
(mp.count(x)&&query(mp[y]+1,mp[x]-1)>b[mp[x]])||
(mp.count(y)&&query(mp[y]+1,mp[x]-1)>b[mp[y]])||
(mp.count(x)&&mp.count(y)&&b[mp[y]]<=b[mp[x]])
) printf("false\n");
else if((mp[x]-mp[y]<x-y)||!mp.count(x)||!mp.count(y)) printf("maybe\n");
else printf("true\n");
}
return 0;
}