Pagini recente » Cod sursa (job #212061) | Cod sursa (job #2832963) | Cod sursa (job #3161327) | Cod sursa (job #2222392) | Cod sursa (job #3245353)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct Node
{
int value;
int level;
};
ifstream input("input.in");
ofstream output("output.in");
int main()
{
int n, m;
cin >> n >> m;
vector<vector<int>> numbers(n+1, vector<int>());
for(int i = 0; i < (1<<n); i++){
int temp;
cin >> temp;
numbers[0].push_back(temp);
}
for(int lev = 1; lev <= n; lev++){
if(lev % 2 == 1){
for(int i = 0; i < (1<<(n-lev+1)); i = i+2){
numbers[lev].push_back(numbers[lev-1][i] | numbers[lev-1][i+1]);
}
}
else{
for(int i = 0; i < (1<<(n-lev+1)); i = i+2){
numbers[lev].push_back(numbers[lev-1][i] ^ numbers[lev-1][i+1]);
}
}
}
for(int i = 0; i < m; i++){
int p, b;
cin >> p >> b;
numbers[0][p-1] = b;
int index = p-1;
if(index % 2 == 1){
index--;
}
for(int lev = 1; lev <= n; lev++){
if(lev % 2 == 1){
numbers[lev][index/2] = numbers[lev-1][index] | numbers[lev-1][index+1];
}
else{
numbers[lev][index/2] = numbers[lev-1][index] ^ numbers[lev-1][index+1];
}
index = index/2;
if(index % 2 == 1){
index--;
}
}
cout << numbers[n][0] << "\n";
}
return 0;
}