求助ST表
查看原帖
求助ST表
723198
AAA404楼主2023/7/9 21:37

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;
}

是某一篇题解的思路

2023/7/9 21:37
加载中...