Submission #639998

#TimeUsernameProblemLanguageResultExecution timeMemory
639998maks007XORanges (eJOI19_xoranges)C++14
100 / 100
155 ms11212 KiB
#include "bits/stdc++.h" #define N (int)1e5 std::vector <int> t1, t2; int k ; void update1(const int pos, const int val, int vl = 0, int vr = k - 1, int v = 0) { if(vl == vr) { t1[v] = val; return; } int vm = (vl + vr) / 2; if(pos <= vm) update1(pos, val, vl, vm, 2*v+1); else update1(pos, val, vm+1, vr, 2*v+2); t1[v] = t1[2*v+1] ^ t1[2*v+2]; } void update2(const int pos, const int val, int vl = 0, int vr = k - 1, int v = 0) { if(vl == vr) { t2[v] = val; return; } int vm = (vl + vr) / 2; if(pos <= vm) update2(pos, val, vl, vm, 2*v+1); else update2(pos, val, vm+1, vr, 2*v+2); t2[v] = t2[2*v+1] ^ t2[2*v+2]; } int get1(const int l, const int r, int vl = 0, int vr = k - 1, int v = 0) { if(l > vr || vl > r) return 0; if(l <= vl && vr <= r) return t1[v]; int vm = (vl + vr ) / 2; return get1(l, r, vl, vm, 2*v+1) ^ get1(l, r, vm+1, vr, 2*v+2); } int get2(const int l, const int r, int vl = 0, int vr = k - 1, int v = 0) { if(l > vr || vl > r) return 0; if(l <= vl && vr <= r) return t2[v]; int vm = (vl + vr ) / 2; return get2(l, r, vl, vm, 2*v+1) ^ get2(l, r, vm+1, vr, 2*v+2); } signed main () { int n, q; scanf("%d%d", &n, &q); k= 1; while(k < n) k <<= 1; t1.resize(2*k-1,0); t2.resize(2*k-1.0); int a[n]; for(int i = 0; i < n; i ++) scanf("%d", &a[i]); for(int i = 0; i < n; i ++) { if(i % 2== 0) update1(i, a[i]); else update2(i, a[i]); } while(q --) { int type; scanf("%d", &type); if(type == 1) { int i, x; scanf("%d%d", &i, &x); i --; if(i % 2== 0) update1(i, x); else update2(i, x); }else { int l, r; scanf("%d%d", &l, &r); l --; if((r-l) % 2 == 0) { printf("0\n"); continue; } int ans = 0; if(l % 2 == 0) { ans = get1(l, r-1); }else { ans = get2(l, r-1); } printf("%d\n", ans); } } return 0; }

Compilation message (stderr)

xoranges.cpp: In function 'int main()':
xoranges.cpp:46:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   46 |  scanf("%d%d", &n, &q);
      |  ~~~~~^~~~~~~~~~~~~~~~
xoranges.cpp:52:35: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   52 |  for(int i = 0; i < n; i ++) scanf("%d", &a[i]);
      |                              ~~~~~^~~~~~~~~~~~~
xoranges.cpp:59:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   59 |   scanf("%d", &type);
      |   ~~~~~^~~~~~~~~~~~~
xoranges.cpp:62:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   62 |    scanf("%d%d", &i, &x);
      |    ~~~~~^~~~~~~~~~~~~~~~
xoranges.cpp:68:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   68 |    scanf("%d%d", &l, &r);
      |    ~~~~~^~~~~~~~~~~~~~~~
#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...