可爱萌新求调
查看原帖
可爱萌新求调
1248522
mlvx楼主2024/4/20 11:35

AC#9,其他WA

#include<bits/stdc++.h>
using namespace std;
const int N=50100,L=21;
int n,q,x,y,a[N],b[N],lg[N],f[N][L];map<int,int>mp;
int query(int x,int y){
	int k=lg[y-x+1];
	return max(f[x][k],f[y-(1<<k)+1][k]);
}int main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i]>>b[i],mp[a[i]]=i,f[i][0]=b[i];
	for(int i=2;i<=n;i++)lg[i]=lg[i>>1]+1;
	for(int j=1;j<L;j++)for(int i=1;i<=n-(1<<j)+1;i++)f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1]);
	cin>>q;
	for(;q--;){
		cin>>x>>y;int l=mp[x],r=mp[y];
		if(!r){
			if(!l)puts("maybe");//左右都不确定
			else if(b[l]<=query(l+1,r-1))puts("false");//左<=中间最值
			else puts("maybe");
		}else if(l){//均已知
			if(b[l]<b[r])puts("false");//左<右
			else if(b[r]<=query(l+1,r-1))puts("false");//右<=中间最值
			else if(y-x==r-l)puts("true");
			else puts("maybe");
		}else{//左未知,右已知
			if(b[r]<=query(l+1,r-1))puts("false");
			else puts("maybe");
		}
	}return 0;
}
2024/4/20 11:35
加载中...