30分求调
查看原帖
30分求调
695141
little_QL楼主2024/11/20 13:14
#include<bits/stdc++.h>
#define endl "\n"
using namespace std;
const int N=100010;
int n,m,x;
int a[N],pos[N*10];
int dp[N][20];
void rmq()
{
	for(int i=1;i<=n;i++) dp[i][0]=a[i];
	for(int j=1;j<=20;j++)
	{
		for(int i=1;i+(1<<j)-1<=n;i++)
		{
			dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
		}
	}
}
int main()
{
	int s,l,r,k,cnt;
	cin>>n>>m>>x;
	for(int i=1;i<=n;i++)
	{
		cin>>s;
		a[i]=pos[s^x];
		pos[s]=i;
	}
	rmq();
	while(m--)
	{
		cin>>l>>r;
		k=r-l+1;
		k=log(k)/log(2);
		cnt=max(dp[l][k],dp[r-(1<<k)+1][k]);
		if(cnt>=l) cout<<"yes"<<endl;
		else cout<<"no"<<endl;
	}
	return 0;
}
2024/11/20 13:14
加载中...