버스 기사 집합지
시간 제한6초메모리 제한512 MB
버스 기사 집합 N개에 대해 구간 갱신과 교환 연산을 처리하고, 구간 안의 우수 집합 또는 열등 집합에 속한 기사 기량을 출력합니다.
문제
진주 나들이를 온 보선이는 나들이를 끝내고 원래 살던 서울로 돌아가려고 진주 개양터미널에 도착했다. 그런데 무슨 일인가? 장난꾸러기 버스 기사분들이 전부 숨어버리거나 사라져버렸다. 숨은 장소 곳의 힌트만 남겨 놓은 채 말이다.
개양터미널 매표원 수현이는 난처해졌지만 잘생긴 얼굴 하나만 믿고, 보선이에게 버스 기사분들을 꼭 찾아서 각 버스에 배정해 달라고 부탁했다. 보선이는 '돌아가는 교통편을 무료로 이용할 수 있겠지?'라는 생각에 이 부탁을 들어주기로 했다. 동시에 자기가 타고 갈 버스에는 운전 실력이 가장 좋은 기사를 배정하겠다고 다짐했다.
버스 기사의 운전 실력은 이상 이하의 정수이며, 수치가 높을수록 실력이 좋다. 버스 기사분들이 숨은 곳을 버스 기사 집합지라고 부르며, 총 곳이 있다.
구간 가 주어졌을 때, 구간 안의 우수한 버스 기사 집합지는 다음과 같이 찾을 수 있다.
- 번째 집합지부터 번째 집합지까지 중 운전 실력이 인 버스 기사가 있는 집합지를 모두 고른다. 그런 집합지가 없으면 번째부터 번째까지 모든 집합지를 고른다.
- 1번 과정에서 여러 곳을 골랐다면, 그중 운전 실력이 인 버스 기사가 있는 집합지를 고른다. 그런 집합지가 없으면 직전 과정에서 고른 곳 전체를 고른다.
- 운전 실력을 씩 줄여 가며 2번 과정을 반복하여, 집합지가 하나만 남을 때까지 계속한다. 운전 실력이 음수가 되면 직전 과정에서 고른 곳 전체를 고르고 멈춘다. 따라서 우수한 버스 기사 집합지는 여러 곳일 수 있다.
구간 의 저조한 버스 기사 집합지도 같은 방법으로 찾는다. 다만 각 단계에서 해당 운전 실력의 기사가 있는 집합지 대신 없는 집합지를 고른다. 따라서 구간 안의 우수한 버스 기사 집합지와 저조한 버스 기사 집합지가 같을 수도 있다.
보선이는 일이 수월할 것이라고 믿었지만, 장난꾸러기 기사분들은 한 곳에 가만히 있지 않는다. 갑자기 알 수 없는 곳으로 사라지기도 하고, 갑자기 나타나기도 하며, 다른 집합지로 옮겨 가기도 한다. 다행히 개양터미널의 정보원 우근이 덕분에 이동 정보를 쉽게 알 수 있었지만, 보선이는 점점 귀찮아져서 우리에게 대신 처리해 달라고 부탁했다.
이동 정보의 개수와 우수한 버스 기사 집합지, 저조한 버스 기사 집합지를 알아내야 하는 횟수, 즉 모든 쿼리의 개수는 총 개다. 이를 우리가 대신 처리해 보자.
입력
첫 번째 줄에 버스 기사 집합지의 개수 이 주어진다. ()
두 번째 줄부터 개의 줄에 걸쳐 번째 집합지에 있는 버스 기사의 수 와 버스 기사의 운전 실력 가 공백으로 구분되어 주어진다. 각 줄에 주어지는 는 서로 중복되지 않는다. (; )
번째 줄에는 쿼리의 개수 가 주어진다. ()
번째 줄부터 개의 줄에 걸쳐 쿼리가 한 줄에 하나씩 주어진다. 각 쿼리는 다음과 같다.
- : 인 모든 번째 집합지에 운전 실력이 인 버스 기사를 각각 1명씩, 총 명 추가한다. 주어지는 는 서로 중복되지 않는다. (; ; )
- : 인 모든 번째 집합지에서 중 어느 값과도 운전 실력이 같지 않은 버스 기사는 모두 사라진다. 주어지는 는 서로 중복되지 않는다. (; ; )
- : 번째 집합지에서 중 어느 값과도 운전 실력이 같지 않은 버스 기사는 모두 사라진다. 그다음 각 에 대해, 번째 집합지에 운전 실력이 인 버스 기사가 없다면 그 기사를 1명씩 추가한다. 주어지는 는 서로 중복되지 않는다. (; ; )
- : 번째 집합지의 버스 기사는 모두 번째 집합지로 가고, 번째 집합지의 버스 기사는 모두 번째 집합지로 간다. 즉, 두 집합지의 버스 기사 상태가 서로 바뀐다. ()
- : 구간 안의 저조한 버스 기사 집합지에 있는 모든 버스 기사의 운전 실력을 중복을 제외하고 오름차순으로 출력한다. 그런 기사가 없으면
-1을 출력한다. () - : 구간 안의 우수한 버스 기사 집합지에 있는 모든 버스 기사의 운전 실력을 중복을 제외하고 오름차순으로 출력한다. 그런 기사가 없으면
-1을 출력한다. () - : 구간 안의 저조한 버스 기사 집합지가 구간 안의 우수한 버스 기사 집합지가 되려면 최소 인원만큼 추가해야 하는 버스 기사의 운전 실력을 오름차순으로 출력한다. 단, 추가하는 버스 기사의 운전 실력은 구간 안의 우수한 버스 기사 집합지에 있는 기사의 운전 실력이어야 한다. 기사를 추가하지 않아도 우수한 버스 기사 집합지가 될 수 있다면
-1을 출력한다. ()
모든 쿼리는 주어진 순서대로 하나씩 처리하며, 출력을 요구하는 쿼리는 한 번 이상 주어진다. 입력으로 주어지는 모든 수는 정수이다.
출력
5, 6, 7번 쿼리에 대해 알맞은 답을 한 줄에 하나씩 출력한다.
힌트
Python 3 사용자는 PyPy3로 제출하는 것을 권장한다.