아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

그룹 안에서의 등수

면접 대비

시간 제한5초메모리 제한256 MB

요약
학생 그룹을 합치는 중간에 질의로 주어진 학생이 속한 그룹 안에서 점수 순위를 구합니다.
난이도

보통10점 중 6점

유형
유니온 파인드, 정렬, 이분 탐색
정답자
아직 제출이 없습니다

문제

학생 NN명이 있다. 1≤i≤N1 \le i \le N인 각 ii에 대해 ii번 학생은 시험에서 ii점을 받는다. 학생들은 여러 그룹으로 나뉘어 있고, 처음에는 ii번 그룹에 ii번 학생 한 명만 있다.

다음 두 연산을 처리하는 프로그램을 작성하시오.

  1. 그룹 합치기: 그룹 번호 XX와 YY가 주어지면 YY번 그룹의 학생을 모두 XX번 그룹으로 옮긴다. 합친 뒤에는 YY번 그룹이 없어진다.
  2. 질의: 학생 번호 JJ가 주어지면 JJ번 학생이 속한 그룹에서 JJ번 학생의 등수를 구한다. 한 그룹에서 점수가 가장 높은 학생이 1등, 두 번째로 높은 학생이 2등이고, 그 뒤도 같은 방식이다.

각 테스트 케이스에는 연산이 LL개 주어진다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다 (T≤5T \le 5). 이어서 각 테스트 케이스가 다음 형식으로 주어진다.

테스트 케이스의 첫째 줄에는 두 정수 NN과 LL이 주어진다 (1≤N≤100 0001 \le N \le 100\,000, 1≤L≤200 0001 \le L \le 200\,000).

다음 LL개 줄에는 연산이 한 줄에 하나씩 주어진다. 각 줄은 연산의 종류를 나타내는 정수 KK로 시작한다.

  • K=1K = 1이면 같은 줄에 정수 XX와 YY가 더 주어진다. YY번 그룹의 학생을 XX번 그룹으로 합친다.
  • K=2K = 2이면 정수 JJ가 하나 더 주어진다. JJ번 학생이 속한 그룹에서 그 학생의 등수를 출력한다.

합치기 연산에 주어지는 두 그룹은 모두 아직 남아 있는 그룹이고, XX와 YY는 서로 다르다.

출력

질의 연산마다 그 학생의 등수를 한 줄에 하나씩 출력한다. 모든 테스트 케이스의 답을 질의가 주어진 순서대로 이어서 출력한다.

예제3

  1. 예제 1

    입력
    2
    3 5
    2 2
    1 2 3
    2 2
    1 1 2
    2 2
    4 4
    1 1 2
    1 1 3
    1 1 4
    2 2
    
    예상 출력
    1
    2
    2
    3
    
  2. 예제 2

    입력
    1
    3 6
    2 1
    1 3 1
    2 1
    2 3
    1 3 2
    2 2
    
    예상 출력
    1
    2
    1
    2
    
  3. 예제 3

    입력
    1
    6 11
    1 1 2
    1 1 3
    1 1 4
    1 1 5
    1 1 6
    2 1
    2 2
    2 3
    2 4
    2 5
    2 6
    
    예상 출력
    6
    5
    4
    3
    2
    1