Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define endl '\n'
- #define ll long long
- using namespace std;
- const ll maxn = (ll)1e5 + 1;
- vector<ll> numbers(maxn);
- vector<ll> tree(4*maxn);
- bool flip;
- ll n, m, a, p, b;
- void build(int pos, int i, int j){
- int esq = 2*pos;
- int dir = 2*pos + 1;
- int mid = (i+j)/2;
- if(i == j){
- tree[pos] = numbers[i];
- }else{
- tree[pos] = 0;
- build(esq, i, mid);
- build(dir, mid+1,j);
- if(!flip) tree[pos] = tree(esq) | tree(dir);
- else tree[pos] = tree(esq) ^ tree(dir);
- flip = !flip;
- }
- }
- int update(int pos,int i, int j, int x, int value){
- int esq = 2*pos;
- int dir = 2*pos + 1;
- int mid = (i+j)/2;
- if(i == j){
- tree[pos] = value;
- }else{
- if(!flip){
- if(x <= mid) tree[pos] = update(esq, i, mid, x, value) | tree[dir];
- else tree[pos] = tree[esq] | update(dir, mid+i, j, x, value);
- }
- else{
- if(x <= mid) tree[pos] = update(esq, i, mid, x, value) ^ tree[dir];
- else tree[pos] = tree[esq] ^ update(dir, mid+i, j, x, value);
- }
- flip = !flip;
- }
- return tree[pos];
- }
- int main(){
- cin.tie(0);
- ios::sync_with_stdio(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement