Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*If you want something you've never had, you have to do something you never did.*/
- #include<bits/stdc++.h>
- using namespace std;
- #define pb push_back
- #define ll long long
- #define pii pair<ll,ll>
- #define pll pair<ll,ll>
- #define M 100007
- #define INF 1e9
- #define INFL 1e18
- #define PI acos(-1)
- #define mp make_pair
- #define fast_in_out ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- //const ll fx[]= {+1,-1,+0,+0};
- //const ll fy[]= {+0,+0,+1,-1};
- //const ll fx[]={+0,+0,+1,-1,-1,+1,-1,+1}; // Kings Move
- //const ll fy[]={-1,+1,+0,+0,+1,+1,-1,-1}; // Kings Move
- //const ll fx[]={-2, -2, -1, -1, 1, 1, 2, 2}; // Knights Move
- //const ll fy[]={-1, 1, -2, 2, -2, 2, -1, 1}; // Knights Move
- ll tree[4*150000];
- ll arr[150100];
- ll n,m;
- ll mypow(ll x)
- {
- ll ans=1;
- while(x!=0)
- {
- ans=ans*2;
- x--;
- }
- return ans;
- }
- void init(ll node,ll b,ll e,ll flag)
- {
- if(b==e)
- {
- tree[node]=arr[b];
- return;
- }
- ll left=node*2;
- ll right=node*2+1;
- ll mid=(b+e)/2;
- init(left,b,mid,(flag+1)%2);
- init(right,mid+1,e,(flag+1)%2);
- if(flag==0)
- {
- tree[node]=(tree[left] | tree[right]);
- // cout<<node<<" "<<tree[node]<<" "<<flag<<endl;
- }
- else
- {
- tree[node]=(tree[left] ^ tree[right]);
- // cout<<node<<" "<<tree[node]<<" "<<flag<<endl;
- }
- }
- void update(ll node,ll b,ll e,ll i,ll newvalue,ll flag)
- {
- if(i>e || i<b)
- return;
- if(b==e)
- {
- tree[node]=newvalue;
- return;
- }
- ll left=node*2;
- ll right=node*2+1;
- ll mid=(b+e)/2;
- update(left,b,mid,i,newvalue,(flag+1)%2);
- update(right,mid+1,e,i,newvalue,(flag+1)%2);
- if(flag==0)
- {
- tree[node]=(tree[left] | tree[right]);
- }
- else
- {
- tree[node]=(tree[left] ^ tree[right]);
- }
- }
- int main()
- {
- fast_in_out;
- //freopen("input.txt","r",stdin);
- //freopen("output.txt","w",stdout);
- ll x;
- cin>>x>>m;
- n=mypow(x);
- for(ll i=1;i<=n;i++)
- {
- cin>>arr[i];
- }
- ll flag=0;
- if(x%2==0)
- flag=1;
- init(1,1,n,flag);
- // cout<<tree[1]<<endl;
- while(m--)
- {
- ll p,b;
- cin>>p>>b;
- update(1,1,n,p,b,flag);
- cout<<tree[1]<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment