社区讨论
p8377求调1wa6re
学术版参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lo21pnme
- 此快照首次捕获于
- 2023/10/23 06:33 2 年前
- 此快照最后确认于
- 2023/11/03 06:56 2 年前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,x;
int a[100005],b[100005],ans[100005];
int bac[2000005],l,r;
struct node{
int dat,lft,rgt;
}t[40 * 100005];
int read(){
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1;c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0',c = getchar();
return x * f;
}
void write(int x){
if(x < 0) putchar('-'),x = -x;
if(x > 9) write(x / 10);
putchar(x % 10 + '0');
}
void make_tree(int p,int lft,int rgt){
t[p].lft = lft,t[p].rgt = rgt;
if(lft == rgt){
t[p].dat = ans[lft];
return;
}
int mid = (lft + rgt) / 2;
make_tree(p << 1,lft,mid);
make_tree(p << 1 + 1,mid + 1,rgt);
t[p].dat = max(t[p << 1].dat,t[p << 1 + 1].dat);
}
int query(int p){
int lft = t[p].lft,rgt = t[p].rgt;
if(lft > r || rgt < l)
return 0;
if(lft >= l && rgt <= r)
return t[p].dat;
return max(query(p << 1),query(p << 1 + 1));
}
signed main(){
n = read(),m = read(),x = read();
for(int i = 1;i <= n;i++){
a[i] = read();
b[i] = a[i] ^ x;//与a[i] xor 为x的数
bac[a[i]] = i;//更新a[i]这个数出现的位置
ans[i] = bac[b[i]];//i前符合条件的数的最近位置
}
make_tree(1,1,n);
for(int i = 1;i <= m;i++){
l = read(),r = read();
int jud = query(1);
if(jud >= l)
printf("yes\n");
else printf("no\n");
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...