만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

비트 연산 식

면접 대비

시간 제한2초메모리 제한1024 MB

요약
0에서 시작해 AND, OR, XOR 연산을 왼쪽부터 차례로 적용합니다. 연산 하나를 바꾼 뒤마다 최종 값을 구합니다.
난이도

보통10점 중 6점

유형
세그먼트 트리, 비트 연산, 배열
정답자
아직 제출이 없습니다

문제

야니카는 최근 비트 연산 AND, OR, XOR를 배웠고, 이 연산으로 식을 만들어 그 값을 계산하려고 한다.

식의 맨 앞에는 숫자 00이 쓰여 있다. 그 뒤에 NN개의 연산이 이어지며, 각 연산은 배운 비트 연산 중 하나와 정수 하나로 이루어진다. 예를 들어 N=6N = 6일 때 다음과 같은 식이 된다.

0 XOR 2 AND 5 OR 9 XOR 0 AND 8 OR 10

식의 값은 항상 왼쪽에서 오른쪽으로 계산한다. 이를 괄호로 나타내면 다음과 같다.

((((((0 XOR 2) AND 5) OR 9) XOR 0) AND 8) OR 10)

야니카는 식의 연산을 하나씩 바꾸려고 한다. 예를 들어 OR 9를 XOR 13으로 바꿀 수 있다. 야니카는 이런 변경을 QQ번 연속으로 하며, 변경할 때마다 새 식의 값을 알고 싶어 한다.

입력

첫 줄에는 연산의 개수 NN (1≤N≤1051 \le N \le 10^5)과 변경 횟수 QQ (1≤Q≤1051 \le Q \le 10^5)가 주어진다.

다음 NN개 줄에는 처음 식의 각 연산이 주어진다. 각 줄에는 연산 이름 AND, OR, XOR 중 하나와 정수 XX (0≤X≤1090 \le X \le 10^9)가 주어진다.

다음 QQ개 줄에는 각 변경이 주어진다. 각 줄에는 바꿀 연산의 순서 번호 II (1≤I≤N1 \le I \le N), 새 연산 이름 AND, OR, XOR 중 하나, 새 정수 XX (0≤X≤1090 \le X \le 10^9)가 주어진다.

출력

각 변경 후 식의 값을 한 줄에 하나씩 정수로 출력한다.

힌트

AND(논리 곱)는 두 참거짓 값에 대한 연산이며, 두 값이 모두 참일 때만 참이고 그 밖의 경우에는 거짓이다. OR(논리 합)은 두 값이 모두 거짓일 때만 거짓이고 그 밖의 경우에는 참이다. XOR(배타적 논리 합)은 두 값 중 정확히 하나가 참일 때 참이고 그 밖의 경우에는 거짓이다.

이 연산을 정수에 적용할 때는 두 수를 이진수로 나타내고, 각 비트를 참(11)이나 거짓(00)으로 본다. 같은 자리의 비트끼리 연산한 뒤, 결과 비트들로 새 이진수를 만든다.

예를 들어 55의 이진수는 010120101_2이고 1212의 이진수는 110021100_2이다. 010120101_2 XOR 110021100_2는 낮은 자리부터 1 XOR 0 = 1, 0 XOR 0 = 0, 1 XOR 1 = 0, 0 XOR 1 = 1을 계산하므로 100121001_2, 즉 99가 된다. 따라서 55 XOR 12=912 = 9이다.

예제1

  1. 예제 1

    입력
    4 3
    XOR 2
    OR 5
    OR 9
    XOR 0
    2 AND 5
    3 OR 8
    4 XOR 10
    
    예상 출력
    9
    8
    2