#include #define int long long using namespace std; const int maxn = 1e3 + 5; int n, q, ans, a[maxn], b[maxn], ans1[maxn], ans2[maxn]; signed main() { //freopen("seed.in", "r", stdin); //freopen("expeditionbl.out", "w", stdout); cin >> n; for (int i = 1; i <= n; ++ i) { cin >> a[i]; } for (int i = 1; i <= n; ++ i) { cin >> b[i]; ans1[i] = ans1[i - 1]; ans2[i] = ans2[i - 1]; if (a[i] == 2) { ans2[i] += b[i]; } if (a[i] == 1) { ans1[i] += b[i]; } } cin >> q; if (n <= 1000 && q <= 1000) { while (q --) { int l, r, x, cur = 0; cin >> l >> r >> x; for (int i = l; i <= r; ++ i) { if (x <= 0) { break; } if ((x | a[i]) == x) { x -= a[i]; cur += b[i]; } if (x <= 0) { break; } } //cout << cur << '\n'; ans ^= cur; } cout << ans; return 0; } while (q --) { //cout << q << '\n'; int l, r, x; cin >> l >> r >> x; if (x == 3) { int cur = 0; for (int i = l; i <= r; ++ i) { if (x - a[i] >= 0) { x -= a[i]; cur += b[i]; } if (x == 0) { break; } } ans ^= cur; continue; } if (x == 1) { int pos = upper_bound(ans1 + l, ans1 + 1 + r, ans1[l - 1]) - ans1; ans ^= (ans1[pos] - ans1[l - 1]); continue; } if (x == 2) { int pos = upper_bound(ans2 + l, ans2 + 1 + r, ans2[l - 1]) - ans2; ans ^= (ans2[pos] - ans2[l - 1]); continue; } } cout << ans; return 0; }