思路:
树状数组模板加法改成异或,求前缀和改成求前缀异或即可。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
int a[N], c[N], n, m, x, y, flag;
int lowbit(int x)
{
return x & -x;
}
void update(int x, int v)
{
for (int i = x; i <= n; i += lowbit(i))
c[i] ^= v;
}
int sum(int i)
{
int res = 0;
for (int j = i; j; j -= lowbit(j))
res ^= c[j];
return res;
}
int sum(int l, int r)
{
return sum(r) ^ sum(l - 1);
}
// 以上为树状数组模板
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
update(i, a[i]);
}
while (m--)
{
cin >> flag >> x >> y;
if (flag == 1)
{
a[x] ^= y;
update(x, y);
}
else
{
cout << sum(x, y) << endl;
}
}
return 0;
}