XOR 합 2
시간 제한2초메모리 제한512 MB
삽입과 질의가 섞인 명령을 순서대로 처리하며, 저장된 수 중 K번째로 큰 값들의 XOR 합을 출력한다.
문제
수를 담는 리스트가 하나 있다. 리스트는 비어 있는 상태에서 시작하고, 명령 개를 주어진 순서대로 처리한다.
insert N 명령은 리스트에 수 을 넣는다. 같은 수가 여러 번 들어올 수 있고, 들어온 횟수만큼 리스트에 남는다.
print K 명령은 리스트에서 가장 큰 수 개의 XOR 합을 출력한다. 같은 수가 여러 개 들어 있으면 하나하나를 서로 다른 원소로 센다. 리스트에 있는 수가 개보다 적으면 리스트에 있는 모든 수의 XOR 합을 출력하고, 리스트가 비어 있으면 0을 출력한다.
XOR 합은 대상이 되는 수를 모두 XOR 한 결과다. 두 정수의 XOR은 대부분의 언어에서 ^ 연산자로 계산하고, 하스켈에서는 xor를 쓴다. XOR에는 이면 이고 이라는 성질이 있다.
입력
첫 줄에 테스트 케이스의 개수 ()가 주어진다. 각 테스트 케이스의 첫 줄에는 명령의 개수 ()가 주어지고, 이어지는 개의 줄에 명령이 한 줄에 하나씩 주어진다.
명령은 다음 두 형태 중 하나다.
insert N
print K
은 보다 작은 음이 아닌 정수이고, 는 보다 작은 양의 정수다.
출력
print 명령마다 답을 한 줄에 하나씩 출력한다. 리스트는 테스트 케이스마다 비어 있는 상태에서 시작한다.