异或和查询
题目描述:
给定一个包含 n 个整数的数组,你的任务是处理 q 个查询,每个查询的形式为:计算区间 [a,b] 内所有元素的异或和是多少?输入:
第一行输入两个整数 n 和 q:分别表示数组元素的数量和查询的数量。
第二行有 n 个整数 x1,x2,...,xn:表示数组的元素。
接下来有 q 行,每行描述一个查询,包含两个整数 a 和 b:表示查询区间 [a,b] 的异或和。约束条件:
1 ≤ n,q ≤ 2*105
1 ≤ x_i ≤ 109
1 ≤ a ≤ b ≤ n输出:
输出每个查询的结果。样例输入:
8 4
3 2 4 5 1 1 5 3
2 4
5 6
1 8
3 3样例输出:
3
0
6
4
x ^ x = 0
x ^ 0 = x
。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;int n,q,x[N]{0};int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin>>n>>q;for(int i=1;i<=n;++i){cin>>x[i];x[i]=x[i-1]^x[i];}while(q--){int a,b;cin>>a>>b;cout<<(x[b]^x[a-1])<<'\n';}return 0;
}