#5233. Phép toán bit luân phiên (Mã bài: XENIABIT)

Bộ nhớ: 256 MiB Thời gian: 1000 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: So sánh văn bản
Đưa lên bởi: Trùm CUỐI

Đề bài

Xenia có một mảng a gồm 2^n số nguyên. Cô ấy muốn xây dựng một cấu trúc cây từ mảng này. Ở tầng đầu tiên, cô ấy sẽ lấy các phần tử kề nhau và tính phép toán OR: a_1 \text{ OR } a_2 , a_3 \text{ OR } a_4 ,... Kết quả sẽ tạo thành một mảng mới có 2^{n-1} phần tử. Ở tầng thứ hai, cô ấy làm tương tự nhưng dùng phép toán XOR. Quá trình này tiếp tục, luân phiên giữa OR và XOR, cho đến khi chỉ còn một phần tử duy nhất.

Bạn được cho mảng ban đầu và m truy vấn. Mỗi truy vấn có dạng p b, yêu cầu cập nhật giá trị a_p = b và sau đó in ra giá trị cuối cùng của cây sau khi tính toán lại.

Dữ liệu:

  • Dòng đầu tiên chứa hai số nguyên n m ( 1 \le n \le 17 , 1 \le m \le 10^5 ).
  • Dòng thứ hai chứa 2^n số nguyên của mảng a ( 0 \le a_i < 2^{30} ).
  • m dòng tiếp theo, mỗi dòng chứa hai số nguyên p, b ( 1 \le p \le 2^n , 0 \le b < 2^{30} ).

Kết quả: Sau mỗi truy vấn cập nhật, in ra giá trị cuối cùng của cây trên một dòng mới.

Ví dụ:

Dữ liệu:

2 4
1 6 3 5
1 4
3 4
1 7
4 7

Kết quả:

1
3
7
7