怎么定义DP很关键,应该为之后的询问服务,所以预处理区间,DP存区间
然后想好状态转移方程dp[i]=max(dp[i-1],h[a[i]^x]);
虽然懂了,但是不看题解还是很难想出来,好不甘心
#include<iostream>
using namespace std;
const int N=1e5+5,M=2e6;
int n,m,x,a[N];
int dp[N],h[M];
int main(){
scanf("%d %d %d",&n,&m,&x);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
dp[i]=max(dp[i-1],h[a[i]^x]);
h[a[i]]=i;
}
while(m--){
int l,r;scanf("%d %d",&l,&r);
if(l>dp[r]) printf("no\n");
else printf("yes\n");
}
return 0;
}