전체 XOR 갱신이 반복되는 배열에서 K번째로 작은 원소까지의 합을 구한다.
어려움8트라이비트 연산분할 정복구현아직 제출이 없습니다시간 제한3초메모리 제한512 MB"으아아아아악..."
스스로를 '칠흑의 날개'라고 부르는 에디는 악의 조직 다크 리유니온과 싸우고 있었다. 그러다 화들짝 놀라며 꿈에서 깼다.
'더 강해져야 해.' 에디는 속으로 되뇌었다.
에디는 강한 전사가 되려고 자주 수련한다. 수련하는 동안 에디는 마법석 N개를 모았다. i번 마법석에는 어둠의 힘이 Ai만큼 담겨 있다. 에디는 Q번의 차례를 진행하고, 각 차례마다 다음 두 가지 중 하나를 고른다.
1 X: 모든 마법석에 어둠의 힘 X를 사용한다. 각 마법석의 어둠의 힘은 지금 값과 X의 비트 단위 배타적 논리합으로 바뀐다. 즉 어둠의 힘이 Ai인 마법석은 Ai⊕X가 된다.2 K: 모든 마법석을 어둠의 힘이 작은 순서대로 정렬한 다음, 앞에서 K개의 어둠의 힘을 더한다. 이 차례는 마법석의 어둠의 힘을 바꾸지 않는다.에디의 계산이 맞는지 확인해 주자.
x⊕y는 두 정수 x와 y에 비트 단위 배타적 논리합을 적용한 결과이다. 이 연산은 현대 프로그래밍 언어라면 모두 제공한다. C++와 자바에서는 ^로 쓰고, 파스칼에서는 xor로 쓴다.
첫째 줄에 테스트 케이스의 개수 T가 주어진다.
각 테스트 케이스의 첫째 줄에는 마법석의 개수 N과 명령의 개수 Q가 주어진다.
둘째 줄에는 정수 N개 A1,A2,…,AN이 주어진다. Ai는 i번 마법석에 담긴 어둠의 힘이다.
이어지는 Q개의 줄에는 명령이 한 줄에 하나씩 1 X 또는 2 K 형태로 주어진다.
다음을 가정해도 된다.
2 K 명령마다 정렬한 뒤 앞에서 K개의 어둠의 힘을 더한 값을 한 줄에 하나씩 출력한다.