토너먼트

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

요약
2^N명이 겨루는 토너먼트 대진에서 선수 교체가 일어날 때마다 우승자의 위치와 특정 선수가 몇 라운드까지 이기는지를 답한다.
난이도

보통10점 중 7점

유형
트리, 세그먼트 트리, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

한 해설자가 싱글 엘리미네이션(단판 토너먼트) 방식의 가구 분해 대회를 24시간 중계하게 되었다. 각 참가자는 가구 분해 실력 값을 가지며, 이 값은 11 이상 1,000,000,000 이하의 정수이다. 모든 맞대결에서 실력 값이 더 큰 참가자가 이기고 다음 라운드로 올라가며, 진 참가자는 탈락한다. 어느 시점에서든 모든 참가자의 실력 값은 서로 다르다고 보장되므로 무승부는 발생하지 않는다.

토너먼트 트리에는 2N2^N개(1≤N≤201 \le N \le 20)의 자리(위치)가 있으며, 왼쪽부터 1,2,…,2N1, 2, \ldots, 2^N번으로 번호가 매겨져 있다. 첫 라운드에서는 11번과 22번, 33번과 44번, ... 참가자가 각각 맞붙는다. 이후 각 라운드에서는 직전 라운드의 처음 두 경기 승자끼리, 그 다음 두 경기 승자끼리, ... 대결한다. NN번의 라운드가 끝나면 한 명의 우승자가 남는다. 예를 들어 N=2N = 2일 때 토너먼트 트리는 다음과 같다.

여기서 AA는 11번과 22번의 승자, BB는 33번과 44번의 승자, CC는 AA와 BB의 승자이며, CC가 이 토너먼트의 우승자이다.

후원 계약 때문에 시간이 지나면서 일부 참가자가 교체된다. 새로운 사람이 들어올 때마다 토너먼트를 처음부터 다시 진행한다.

MM개(1≤M≤1,000,0001 \le M \le 1{,}000{,}000)의 명령이 주어질 때(입력 형식 참고), 여러 시점에서의 토너먼트 통계를 계산하는 프로그램을 작성하라.

입력

첫째 줄에 두 정수 NN(1≤N≤201 \le N \le 20)과 MM(1≤M≤1,000,0001 \le M \le 1{,}000{,}000)이 공백 하나로 구분되어 주어진다.

다음 2N2^N개의 줄에는 각각 정수 SiS_i가 주어지며(ii는 11부터 2N2^N까지), 이는 토너먼트 트리의 위치 ii에 있는 초기 참가자의 실력 값이다.

그 다음 MM개의 줄에는 각각 다음 세 가지 형식 중 하나의 명령이 주어진다.

  • R i S — 위치 ii의 참가자를 제거하고 실력 값이 SS인 새 참가자로 교체한다. 그런 다음 토너먼트를 다시 진행한다.
  • W — 현재 토너먼트의 우승자를 구하여 그 참가자의 위치 ii(11 이상 2N2^N 이하)를 출력한다.
  • S i — 현재 토너먼트에서 위치 ii의 참가자가 이긴 라운드 수를 출력한다.

출력

각 W 또는 S i 명령마다 해당하는 정수를 한 줄에 하나씩 출력한다.

예제4

  1. 예제 1

    입력
    2 8
    30
    20
    10
    40
    S 1
    W
    R 4 9
    S 4
    W
    R 2 35
    S 2
    W
    
    예상 출력
    1
    4
    0
    1
    2
    2
    
  2. 예제 2

    입력
    1 3
    5
    8
    W
    S 1
    S 2
    
    예상 출력
    2
    0
    1
    
  3. 예제 3

    입력
    1 4
    10
    20
    W
    R 1 100
    W
    S 1
    
    예상 출력
    2
    1
    1
    
  4. 예제 4

    입력
    3 9
    3
    7
    1
    9
    5
    2
    8
    6
    W
    S 1
    S 2
    S 3
    S 4
    S 5
    S 6
    S 7
    S 8
    
    예상 출력
    4
    0
    1
    0
    3
    1
    0
    2
    0