Bititehete avaldis

면접 대비

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

요약
0에서 시작해 AND, OR, XOR 연산을 왼쪽부터 차례로 적용한 값을 유지하면서, 각 위치 갱신이 끝난 뒤의 전체 식 값을 출력한다.
난이도

보통10점 중 6점

유형
세그먼트 트리, 비트 연산, 분할 정복, 구현
정답자
아직 제출이 없습니다

문제

Janika õppis hiljuti bititehete AND, OR ja XOR kohta ning tahab nüüd nendega avaldise koostada ja selle väärtust arvutada.

Avaldise algusesse kirjutab Janika arvu 00. Selle järele kirjutab ta NN tehet, kus iga tehe kasutab ühte õpitud bitioperatsiooni ning mingisugust täisarvu, näiteks "AND 5". Seega võib ta N=6N = 6 korral saada tulemuseks näiteks avaldise

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

Avaldise väärtust arvutab ta alati vasakult paremale, nagu selles oleks mõttelised sulud järgmiselt

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

Edasi tahab Janika hakata oma avaldises üksikuid tehteid muutma, näiteks võib ta "OR 9" asemele kirjutada "XOR 13". Ta teeb oma avaldises üksteise järel QQ muudatust ja tahab iga muudatuse järel teada sellega saadud uue avaldise väärtust.

입력

Sisendi esimesel real on kaks täisarvu: avaldise tehete arv NN (1≤N≤1051 \le N \le 10^5) ja muudatuste arv QQ (1≤Q≤1051 \le Q \le 10^5).

Järgmisel NN real on igaühel algse avaldise ühe tehte kirjeldus: tehte nimi AND, OR või XOR ja täisarv XX (0≤X≤1090 \le X \le 10^9).

Järgmisel QQ real on igaühel ühe muudatuse kirjeldus: asendatava tehte järjekorranumber II (1≤I≤N1 \le I \le N) ning uue tehte nimi AND, OR või XOR ja uus täisarv XX (0≤X≤1090 \le X \le 10^9).

출력

Iga muudatuse kohta väljasta eraldi reale üks täisarv: avaldise väärtus selle muudatuse järel.

힌트

AND ("loogiline JA") on loogiline tehe kahe tõeväärtuse vahel, mille tulemus on "tõene", kui mõlema operandi väärtus on "tõene", ja "väär" igal muul juhul. OR ("loogiline VÕI") tulemus on "väär", kui mõlema operandi väärtus on "väär", ja "tõene" igal muul juhul. XOR ("välistav VÕI") tulemus on "tõene", kui täpselt üks operandidest "tõene", ja "väär" igal muul juhul.

Nende tehete rakendamisel arvudele vaadatakse arvude esitust kahendsüsteemis, tõlgendatakse iga bitti tõeväärtusena (11 = "tõene", 00 = "väär"), rakendatakse tehe operandide kohakuti olevatele bittidele (ühelised omavahel, kahelised omavahel j.n.e) ning koostatakse saadud tulemustest uus kahendarv.

Näiteks arvu 55 kahendkuju on 0101_20101\_2 ja arvu 1212 kahendkuju 1100_21100\_2. Avaldise 0101_20101\_2 XOR 1100_21100\_2 väärtuse kahendkuju arvutatakse järgmiselt: ühelised 11 XOR 0=10 = 1; kahelised 00 XOR 0=00 = 0; neljalised 11 XOR 1=01 = 0; kaheksalised 00 XOR 1=11 = 1. Kokku saame seega 0101_20101\_2 XOR 1100_2=1001_21100\_2 = 1001\_2, mis on arvu 99 kahendkuju. Seega 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