삼진논리 OR과 쿼리

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

요약
원소를 추가하는 집합에서 질의 값과의 삼진 OR 최댓값을 구하는 문제로, 각 수는 3진법 15자리까지다.
난이도

보통10점 중 7점

유형
트라이, 그리디, 비트 연산, 구현
정답자
아직 제출이 없습니다

문제

음이 아닌 두 정수 XX, YY에 대하여 다음 조건을 모두 만족하는 정수 mm, x_0x\_0, x_1x\_1, ⋯\cdots, x_mx\_m, y_0y\_0, y_1y\_1, ⋯\cdots, y_my\_m이 존재한다.

  • m≥0m \ge 0
  • 0≤i≤m0 \le i \le m을 만족하는 모든 정수 ii에 대하여 0≤x_i,y_i<30\le x\_i, y\_i \lt 3이다.
  • X=∑_i=0mx_i⋅3i\displaystyle X = \sum\_{i=0}^{m} x\_i \cdot 3^i
  • Y=∑_i=0my_i⋅3i\displaystyle Y = \sum\_{i=0}^{m} y\_i \cdot 3^i

이때 OR_3(X,Y):=∑_i=0mmax⁡(x_i,y_i)⋅3i\displaystyle {OR}\_3 (X,Y) := \displaystyle \sum\_{i=0}^{m} \max \left( x\_i , y\_i \right) \cdot 3^i의 값은 유일하게 결정된다.

집합 S = \left\\{ 0 \right\\}에 아래와 같은 MM개의 쿼리를 수행하는 프로그램을 작성해 보자.

  • 11 xx: 집합 SS를 S \cup \left\\{ x \right\\}로 갱신한다.
  • 22 xx: max⁡_a∈S(OR_3(a,x))\displaystyle \max\_{a\in S} { \left( {OR}\_3 (a,x) \right) }의 값을 출력한다. 즉, 집합 SS의 원소 aa에 대하여 OR_3(a,x){OR}\_3 (a,x)의 최댓값을 출력한다.

쿼리가 누적해서 수행됨에 유의하여라.

입력

첫째 줄에 쿼리의 개수 MM이 주어진다. (1≤M≤500000)(1 \le M \le 500 000)

둘째 줄부터 MM개의 줄에 걸쳐 쿼리가 qq xx 형태로 주어진다. (1≤q≤2;(1 \le q \le 2; 0≤x<315)0 \le x \lt 3^{15})

22번 쿼리는 하나 이상 주어진다. 입력으로 주어지는 모든 수는 정수이다.

출력

22번 쿼리가 주어질 때마다 쿼리의 답을 한 줄에 하나씩 출력한다.

힌트

임의의 실수 x,yx,y에 대하여 max⁡(x,y)={x(x≥y) y(x\<y)\max (x,y) = \begin{cases} x & (x \ge y) \\\ y & (x\<y) \end{cases}로 정의한다.

315=143489073^{15} = 14 348 907이다.

예제1

  1. 예제 1

    입력
    5
    2 8
    1 5
    2 21
    1 7
    2 15
    
    예상 출력
    8
    23
    17