Submission #1210080

#TimeUsernameProblemLanguageResultExecution timeMemory
1210080sunflowerXORanges (eJOI19_xoranges)C++17
100 / 100
50 ms3996 KiB
#include <bits/stdc++.h>
using namespace std;

int n, q;

#define MAX_N 200'200
int a[MAX_N + 7];

struct BIT {
  int bit[MAX_N + 7];

  void update(int x, int v) {
    for (; x <= n; x += x & (-x)) bit[x] ^= v;
  }

  int get(int x) {
    int ans = 0;
    for (; x > 0; x -= x & (-x)) ans ^= bit[x];
    return ans;
  }

  int cal(int l, int r) {
    if (l > r) return 0;
    return get(r) ^ get(l - 1);
  }
} sumXor[2];

#undef MAX_N

int main() {
  ios_base::sync_with_stdio(false);cin.tie(nullptr);
  if (fopen("test.inp","r")) {
    freopen("test.inp","r",stdin);
    freopen("test.out","w",stdout);
  }
  cin >> n >> q;
  for (int i = 1; i <= n; ++i) cin >> a[i];

//  for (int i = 1; i <= n; ++i) {
//    pre.update(i, a[i]);
//    sumXor.update(i, pre.get(i));
//  }

//  vector <int> _pre(n + 2, 0), _sumXor(n + 2, 0);

/// value of sumXor: xor of all i cung tinh chan le;

  for (int i = 1; i <= n; ++i) sumXor[i & 1].update(i, a[i]);

  while (q--) {
    int type;
    cin >> type;
    if (type == 1) {
      int i, val;
      cin >> i >> val;

//      int pref = pre.get(pos);
//
//      pre.update(pos, a[pos] ^ val);
//
//      sumXor.update(pos, pre.get(pos) ^ pref);

      sumXor[i & 1].update(i, a[i] ^ val);
      a[i] = val;
//      _pre[0] = 0;
//      for (int i = 1; i <= n; ++i) _pre[i] = _pre[i - 1] ^ a[i];
//
//      _sumXor[0] = 0;
//      for (int i = 1; i <= n; ++i) _sumXor[i] = _sumXor[i - 1] ^ _pre[i];

    } else {
      int l, r;
      cin >> l >> r;

      int ans = 0;
      if ((r - l + 1) % 2 == 1) {
          ans = sumXor[r & 1].get(r) ^ sumXor[max(0, l - 2) & 1].get(l - 2);
      }

      cout << ans << "\n";
    }
  }

  return 0;
}

Compilation message (stderr)

xoranges.cpp: In function 'int main()':
xoranges.cpp:33:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   33 |     freopen("test.inp","r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
xoranges.cpp:34:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |     freopen("test.out","w",stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...