fork download
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define el "\n"
  4. #define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  5. #define __ROOT__ int main()
  6. #pragma GCC optimize("O2")
  7. #define fi first
  8. #define se second
  9. #define M 1000000007
  10. #define MAXN 200001
  11. #define GIOIHAN 1000001
  12. #define BLOCK_SIZE 425
  13. #define MAX_NODE 1001001
  14. #define LOG 19
  15. #define ALPHA_SIZE 26
  16. #define BASE 311
  17. #define NAME "file"
  18. #define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
  19. using namespace std;
  20. const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll)1e9 + 7};
  21. const int dx[] = {-1, 0, 1, 0};
  22. const int dy[] = {0, 1, 0, -1};
  23.  
  24. ll n, q;
  25. ll arr[MAXN];
  26.  
  27. struct Dataupdate {
  28. ll l, r, val;
  29. };
  30. stack<Dataupdate> st;
  31.  
  32. struct Seg {
  33. ll val[MAXN << 2], lazy[MAXN << 2];
  34.  
  35. void fix(ll id, ll l, ll r) {
  36. if (lazy[id]) {
  37. if( (r- l + 1) % 2 == 1) val[id] ^= lazy[id];
  38. if (l != r) {
  39. lazy[id << 1] ^= lazy[id];
  40. lazy[id << 1 | 1] ^= lazy[id];
  41. }
  42. lazy[id] = 0;
  43. }
  44. }
  45.  
  46. void update(ll id, ll l, ll r, ll u, ll v, ll value) {
  47. fix(id, l, r);
  48. if (u > r || v < l) return;
  49. if (u <= l && v >= r) {
  50. lazy[id] = value;
  51. fix(id, l, r);
  52. return;
  53. }
  54. ll m = (l + r) >> 1;
  55. update(id << 1, l, m, u, v, value);
  56. update(id << 1 | 1, m + 1, r, u, v, value);
  57. val[id] = val[id << 1] ^ val[id << 1 | 1];
  58. }
  59.  
  60. ll get(ll id, ll l, ll r, ll u, ll v) {
  61. fix(id, l, r);
  62. if (u > r || v < l) return 0;
  63. if (u <= l && v >= r) return val[id];
  64. ll m = (l + r) >> 1;
  65. return get(id << 1, l, m, u, v) ^ get(id << 1 | 1, m + 1, r, u, v);
  66. }
  67. } seg;
  68.  
  69. void init() {
  70. cin >> n >> q;
  71. }
  72.  
  73. void solve() {
  74. for (ll i = 0; i < q; i++) {
  75. ll t;
  76. cin >> t;
  77. if (t == 1) {
  78. ll l, r, x;
  79. cin >> l >> r >> x;
  80. seg.update(1, 1, n, l, r, x);
  81. st.push({l, r, x});
  82. } else {
  83. ll l, r;
  84. cin >> l >> r;
  85. cout << seg.get(1, 1, n, l, r) << el;
  86. while (!st.empty()) {
  87. Dataupdate t = st.top();
  88. st.pop();
  89. seg.update(1, 1, n, t.l, t.r, t.val);
  90. }
  91. }
  92. }
  93. }
  94.  
  95. __ROOT__ {
  96. fast;
  97. init();
  98. solve();
  99. }
  100.  
Success #stdin #stdout 0.01s 5312KB
stdin
3 4
1 1 3 1
2 1 3
1 1 2 2
2 2 2
stdout
1
2