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...