만드는 중입니다

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

연결된 수열의 과반수 원소

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

요약
n개의 수열에 원소를 넣고 빼는 연산과 수열을 합치는 연산을 처리하고, 이어 붙인 수열에서 과반을 차지하는 수를 출력합니다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 스택, 트리
정답자
아직 제출이 없습니다

문제

이 문제에서 수열의 최빈값은 수열 안에서 전체 길이의 절반보다 많이 등장하는 수를 뜻한다.

처음에 길이가 서로 다른 양의 정수 수열 nn개가 주어진다. 번호는 11부터 nn까지이며, 수열은 비어 있을 수도 있다. 이 nn개의 수열은 존재하는 것으로 보고, 다른 번호의 수열은 존재하지 않는 것으로 본다.

연산은 qq번 주어지며, 종류는 다음과 같다.

  • 1 x y: 수열 xx의 끝에 수 yy를 추가한다. 수열 xx가 존재하고 1≤x,y≤n+q1 \le x, y \le n + q가 보장된다.
  • 2 x: 수열 xx의 끝에 있는 수를 삭제한다. 수열 xx가 존재하고 비어 있지 않으며 1≤x≤n+q1 \le x \le n + q가 보장된다.
  • 3 m x_1 x_2 ... x_m: 수열 x1,x2,…,xmx_1, x_2, \ldots, x_m을 차례로 이어 붙여 새 수열을 만들고, 그 수열의 최빈값을 구한다. 최빈값이 없으면 -1을 출력한다. 각 xix_i는 아직 존재하며 1≤xi≤n+q1 \le x_i \le n + q이고, 이어 붙인 수열은 비어 있지 않다고 보장된다. xix_i가 서로 다르지 않을 수도 있다. 이 연산에서 만든 연결 결과는 이후 연산에 영향을 주지 않는다.
  • 4 x_1 x_2 x_3: 수열 x1x_1과 x2x_2를 이어 붙여 번호가 x3x_3인 새 수열을 만들고, 수열 x1x_1과 x2x_2를 삭제한다. 이 연산 뒤에 수열 x3x_3이 존재하며, 수열 x1x_1과 x2x_2는 존재하지 않게 되어 이후 연산에서 다시 쓰이지 않는다. 1≤x1,x2,x3≤n+q1 \le x_1, x_2, x_3 \le n + q, x1≠x2x_1 \ne x_2이고, 연산 전에 수열 x1x_1과 x2x_2가 존재하며, 연산 전에 번호 x3x_3을 사용한 연산이 없다고 보장된다.

입력

첫 줄에 양의 정수 nn과 qq가 주어진다. n,q≤5×105n, q \le 5 \times 10^5이 보장된다.

다음 nn개의 줄에서 ii번째 줄은 번호가 ii인 수열을 나타낸다. 각 줄의 첫 번째 음이 아닌 정수 lil_i는 수열의 길이이며, 이어서 수열의 원소 ai,1,…,ai,lia_{i,1}, \ldots, a_{i,l_i}가 순서대로 주어진다. Cl=∑liC_l = \sum l_i라 하면 Cl≤5×105C_l \le 5 \times 10^5이고 ai,j≤n+qa_{i,j} \le n + q이다.

다음 qq개의 줄에는 위 형식의 연산이 한 줄에 하나씩 주어진다. 종류 3 연산에서 나열되는 수열 개수의 합을 CmC_m이라 하면 Cm≤5×105C_m \le 5 \times 10^5이다.

출력

종류 3 연산마다 답을 한 줄에 하나씩 출력한다.

제한

모든 데이터에 대해 1≤n,q,Cm,Cl≤5×1051 \le n, q, C_m, C_l \le 5 \times 10^5이다.

예제2

  1. 예제 1

    입력
    2 8
    3 1 1 2
    3 3 3 3
    3 1 1
    3 1 2
    4 2 1 3
    3 1 3
    2 3
    3 1 3
    1 3 1
    3 1 3
    
    예상 출력
    1
    3
    -1
    3
    -1
    
  2. 예제 2

    입력
    4 9
    1 1
    1 2
    1 3
    1 4
    3 4 1 2 3 4
    1 1 2
    3 2 1 2
    2 3
    3 3 1 2 3
    1 4 4
    1 4 4
    1 4 4
    3 4 1 2 3 4
    
    예상 출력
    -1
    2
    2
    4