시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 | 512 MB | 192 | 59 | 37 | 27.612% |
Albert는 최근 (2진수) XOR 연산과 자료구조에 흠뻑 빠져있다.
Albert는 XOR에 관련된 여러 가지 연산을 효율적으로 할 수 있는 자료 구조를 만들고 싶다.
처음에는 n개의 정수를 포함한 집합 S0을 이용하여 자료 구조를 초기화 하며, 그 이후 q개의 연산을 수행하여 옳은 답을 출력해야한다.
각 연산은 아래 다섯 가지 중 하나이며, 일부 연산은 자료 구조에 저장된 정수 집합에 새로운 정수를 추가하거나 정수를 지우기도 한다 (따라서 그 이후의 연산은 영향을 받게 된다).
예를 들어, S0 = {1,1, 3, 3} 이고 아래와 같은 순서로 총 q = 7개의 연산을 적용한다고 해보자.
위의 예제의 경우, 올바른 결과는 (연산 적용 순서대로) [1, 3, 3, 1, 3, 0, 0]이 된다.
입력으로 n, S0, q, 그리고 q개의 연산을 받아 총 q개의 정수 (각 연산을 적용한 후 얻은 결과)를 출력하는 프로그램을 작성하시오.
첫 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 줄에는 n과 q가 공백으로 구분 되어 주어진다.
둘째 줄에는 집합 S0에 포함된 n개의 정수가 공백으로 주어진다.
다음 q줄에 걸쳐 각 줄에 하나의 연산이 주어진다.
각 줄에는 1개 혹은 2개의 정수가 (공백으로 구분되어) 주어지는데, 첫 수는 연산의 종류를 나타내며 {1, 2, 3, 4, 5} 중 하나이다.
문제 본문에 설명된바와 같이, 1은 find_min, 2는 find_max, 3은 add, 4는 remove_min, 그리고 5는 remove_max 연산을 나타낸다.
연산 1-3의 경우에만 같은 줄에 두 번째 정수 "v"가 주어진다.
각 연산을 적용한 후 자료 구조가 출력해야하는 올바른 값을 한 줄에 하나씩 출력한다.
3 4 7 1 1 3 3 1 2 2 2 3 2 4 5 1 2 2 2 10 11 1 3 5 7 9 2 4 6 8 10 1 6 1 8 2 6 2 8 3 10 4 5 1 2 1 17 2 2 2 17 5 11 2 5 8 13 17 1 6 1 8 2 6 2 8 3 10 4 5 1 2 1 17 2 2 2 17
1 3 3 1 3 0 0 0 0 15 15 10 1 10 0 18 11 25 3 0 23 25 6 2 17 7 20 15 28
케이스 1: 본문에서 사용한 예제이다.
케이스 2: 추가 설명 없음.
케이스 3:
연산 시작 전: S = {2, 5, 8, 13, 17}