Untitled
unknown
c_cpp
3 years ago
1.2 kB
10
Indexable
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, m;
scanf("%d%d",&n,&m);
int s=pow(2,n);
int* all[18];
for (int i=0; i<18; i++)
{
all[i]=(int*)malloc(4*131072);
}
for (int i=0; i<s; i++) {int x; scanf("%d",&x);
all[n][i]=x;
}
bool orr=true;
for (int i=n; i>0; i--){
int l=pow(2, i);
for (int j=0; j<l; j+=2)
{
if (orr) all[i-1][j/2] = all[i][j] | all[i][j+1];
else all[i-1][j/2] = all[i][j] ^ all[i][j+1];
}
orr=!orr;
}
//print
/*
for (int i=0; i<=n; i++)
{
int ss=pow(2, i);
for (int k=0; k<ss; k++) printf("%d ", all[i][k]);
printf("\n\n print korlam \n\n");
}*/
for (int i=0; i<m; i++)
{
int p, b;
scanf("%d%d",&p,&b);
p--;
all[n][p]=b;
orr=true;
for (int j=n; j>0; j--)
{int a,b;
if (p%2==0) {a=p; b=p+1;}
else {b=p; a=p-1;}
p=p/2;
if (orr) all[j-1][p]=all[j][a] | all[j][b];
else all[j-1][p]=all[j][a] ^ all[j][b];
orr=!orr;
}
printf("%d\n", all[0][0]);
}
}Editor is loading...