Given a sequence of nn numbers a1 ,a2,⋯,an and three functions.
Define a function f(l,r)f(l,r) which returns \oplus a[x]⊕a[x] (l \le x \le rl≤x≤r). The \oplus⊕ represents exclusive OR.
Define a function g(l,r)g(l,r) which returns \oplus f(x,y)(l \le x \le y \le r)⊕f(x,y)(l≤x≤y≤r).
Define a function w(l,r)w(l,r) which returns \oplus g(x,y)(l \le x \le y \le r)⊕g(x,y)(l≤x≤y≤r).
You are also given a number of xor-queries. A xor-query is a pair (i, j) (1≤i≤j≤n). For each xor-query (i, j)(i,j), you have to answer the result of function w(l,r).
Input
Line 1: t(1≤t≤20).
For each test case:
Line 1: n(1≤n≤100000).
Line 2: n numbers a1, a2 ,⋯,an(1≤ai≤10^9).
Line 33: q(1≤q≤100000), the number of xor-queries.
In the next q lines, each line contains 22 numbers i,j representing a xor-query(1≤i≤j≤n).
It is guaranteed that sum of nn and q≤10^6.
Output
For each xor-query (i, j)(i,j), print the result of function w(i,j)w(i,j) in a single line.
暴力打表找规律,维护前缀异或 #include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 5; int a[maxn]; int b[4][maxn], c[4][maxn]; int dp1[4][maxn], dp2[4][maxn]; int main() { int T, n, m, l, r; scanf("%d", &T); while (T--) { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } for (int i = 0; i < 4; i++) { for (int j = 1; j <= n; j++) { if(j%4==i)b[i][j] = 1; if(j%4==i) { c[i][j]=1;c[i][j + 1] = 1; } } for (int j = 1; j <= n; j++) { dp1[i][j] = dp1[i][j - 1] ^ (b[i][j] * a[j]); dp2[i][j] = dp2[i][j - 1] ^ (c[i][j] * a[j]); } } scanf("%d", &m); while (m--) { scanf("%d%d", &l, &r); int k = (r - l + 1) % 4; if (k == 0) { printf("0\n"); } else if (k == 1) { for (int i = 0; i < 4; i++) { if(b[i][l]) { printf("%d\n", (dp1[i][l - 1] ^ dp1[i][r])); break; } } } else if (k == 3) { for (int i = 0; i < 4; i++) { if (b[i][l]==0 && b[i][l+1] == 1) { printf("%d\n", (dp1[i][l - 1] ^ dp1[i][r])); break; } } } else if (k == 2) { for (int i = 0; i < 4; i++) { if (c[i][l] == 1 && c[i][l + 1] == 1) { printf("%d\n", (dp2[i][l - 1] ^ dp2[i][r])); break; } } } } } return 0; } /* 11001100 01100110 00110011 10011001 1000 1000 1000 0100 0100 0100 0010 0010 0010 0001 0001 0001 */