Submission #1067636

#TimeUsernameProblemLanguageResultExecution timeMemory
1067636raduvXORanges (eJOI19_xoranges)C++14
100 / 100
36 ms8532 KiB
#include <stdio.h>
#include <ctype.h>
#pragma GCC optimize("O3", "unroll-loops", "Ofast")
#pragma GCC target ("avx2")

const int MAXN = 2e5;
using namespace std;
int aib[2][MAXN + 1];
int v[MAXN + 1];
void update(int poz, int x, int n){
  int i;
  for( i = poz; i <= n; i += i & -i){
    aib[poz & 1][i] ^= x;
  }
}
int query(int poz, int par){
  int rez = 0, i;
  for( i = poz; i > 0; i = (i & (i - 1))){
    rez ^= aib[par][i];
  }
  return rez;
}
static inline int getInt(){
  int n = 0, ch;
  while(!isdigit(ch = getc(stdin)));
  do
    n = n * 10 + ch - '0';
  while (isdigit(ch = getc(stdin)));
  return n;
}
int main(){
  int n, q, i, op, l, r;
  n = getInt();
  q = getInt();
  for( i = 1; i <= n; i++ ){
    v[i] = getInt();
    update(i, v[i], n);
  }
  for( i = 0; i < q; i++ ){
    op = getInt();
    l = getInt();
    r = getInt();
    if(op == 1){
      update(l, v[l] ^ r, n);
      v[l] = r;
    }
    else{
      if( (r - l) & 1 ){
        printf("0\n");
      }
      else{
        printf("%d\n", query(r, r & 1) ^ query(l - 1, l & 1));
      }
    }
  }
  return 0;
}
#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...