萌新ST表模版求调QAQ
  • 板块灌水区
  • 楼主Infinite_Energy
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/8/8 18:34
  • 上次更新2024/3/11 17:22:00
查看原帖
萌新ST表模版求调QAQ
561529
Infinite_Energy楼主2023/8/8 18:34

P2471
不过样例求调QAQ

#include<bits/stdc++.h>
using namespace std;
long long n,f[50010][20],power[50010],x,y,pd1,pd2,m,l,r,mid,qx,qy;
struct node{
	long long pos,val;
}a[50010];
long long ans(long long qx,long long qy){
	long long len=power[qy-qx+1];
	return max(f[qx][len],f[qy-(1<<len)+1][len]);
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].pos>>a[i].val;
	}
	for(int i=1;i<=n;i++){
		f[i][0]=a[i].val;
	}
	for(int i=2;i<=n;i++){
		power[i]=power[i/2]+1;
	}
	for(int j=1;(1<<j)<=n;j++){
		for(int i=1;i<=n;i++){
			if(i+(1<<j)-1>n){
				break;
			}
			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;
		if(x<=y){
			cout<<"false"<<endl;
			continue;
		}
		pd1=0;
		pd2=0;
		l=1;
		r=n;
		while(l<=r){
			mid=(l+r)/2;
			if(x>=a[mid].pos){
				if(x==a[mid].pos){
					pd1=1;
				}
				qx=mid;
				l=mid+1;
			}else{
				r=mid-1;
			}
		}
		l=1;
		r=n;
		while(l<=r){
			mid=(l+r)/2;
			if(y>=a[mid].pos){
				if(y==a[mid].pos){
					pd2=1;
				}
				qy=mid;
				l=mid+1;
			}else{
				r=mid-1;
			}
		}
		if(pd1==1&&pd2==1&&a[qy].val>=a[qx].val){
			cout<<"false"<<endl;
			continue;
		}
		if(pd1==1&&pd2==0&&max(qx+1,qy-1)>=a[qx].val){
			cout<<"false"<<endl;
			continue;
		}
		if(pd1==0&&pd2==1&&max(qx,qy-1)>=a[qy].val){
			cout<<"false"<<endl;
			continue;
		}
		if(qy-qx+1!=x-y+1){
			cout<<"maybe"<<endl;
			continue;
		}
		if(pd1==0){
			cout<<"maybe"<<endl;
			continue;
		}
		if(pd2==0){
			cout<<"maybe"<<endl;
			continue;
		}
		cout<<"true"<<endl;
	}
	return 0;
}
2023/8/8 18:34
加载中...