Submission #1219214

#TimeUsernameProblemLanguageResultExecution timeMemory
1219214theiuliusXORanges (eJOI19_xoranges)C++20
100 / 100
228 ms11384 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define int long long #define ff first #define ss second #define pb push_back int n, q; int num; const int N = 2e5+5, mod = 998244353; int tree1[4*N], tree2[4*N]; void update1(int x, int l, int r, int pos, int val){ // pos da find const ari querize if (l == r){ tree1[x] = val; return; } // orobiti dzebna int mid = (l + r) / 2; if (pos <= mid){ // marcxniv update1(2 * x, l, mid, pos, val); }else{ update1(2 * x + 1, mid + 1, r, pos, val); } tree1[x] = tree1[2 * x] ^ tree1[2 * x + 1]; // tree[2x] da tree[2x + 1] ukve datvlili gveqneba recursiis gamo } int get1(int x, int l, int r, int tl, int tr){ // query const: tl, tr // if (tl > tr){ // return 0; // } if (tl <= l && r <= tr){ return tree1[x]; } int mid = (l + r) / 2; int ans = 0; if (tl <= mid){ // marcxniv ans ^= get1(2 * x, l, mid, tl, tr); } if (mid + 1 <= tr){ // marjvniv ans ^= get1(2 * x + 1, mid + 1, r, tl, tr); } return ans; } void update2(int x, int l, int r, int pos, int val){ // pos da find const ari querize if (l == r){ tree2[x] = val; return; } // orobiti dzebna int mid = (l + r) / 2; if (pos <= mid){ // marcxniv update2(2 * x, l, mid, pos, val); }else{ update2(2 * x + 1, mid + 1, r, pos, val); } tree2[x] = tree2[2 * x] ^ tree2[2 * x + 1]; // tree[2x] da tree[2x + 1] ukve datvlili gveqneba recursiis gamo } int get2(int x, int l, int r, int tl, int tr){ // query const: tl, tr // if (tl > tr){ // return 0; // } if (tl <= l && r <= tr){ return tree2[x]; } int mid = (l + r) / 2; int ans = 0; if (tl <= mid){ // marcxniv ans ^= get2(2 * x, l, mid, tl, tr); } if (mid + 1 <= tr){ // marjvniv ans ^= get2(2 * x + 1, mid + 1, r, tl, tr); } return ans; } main(){ /*ifstream cin(".in"); ofstream cout(".out");*/ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> q; int a[n] = {}; for (int i = 0; i < n; i++){ cin >> a[i]; if (i % 2 == 0){ update1(1, 1, n, i + 1, a[i]); }else{ update2(1, 1, n, i + 1, a[i]); } } for (int k = 0; k < q; k++){ cin >> num; if (num == 1){ int i, x; cin >> i >> x; i--; if (i % 2){ update2(1, 1, n, i + 1, x); }else{ update1(1, 1, n, i + 1, x); } }else{ int l, r; cin >> l >> r; l--; r--; if ((r - l + 1) % 2 == 0){ cout << 0 << endl; }else{ if (l % 2){ cout << get2(1, 1, n, l + 1, r + 1) << endl; }else{ cout << get1(1, 1, n, l + 1, r + 1) << endl; } } } } }

Compilation message (stderr)

xoranges.cpp:91:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   91 | main(){
      | ^~~~
#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...