상품권 준비
시간 제한2초메모리 제한1024 MB
실력이 서로 다른 회원들이 이름과 함께 주어질 때, 실력 상위 b명을 제외한 후 남은 후보 중 최적의 M*a명을 a개의 팀으로 나눠 실력 곱의 합을 최대화하고, 선택된 모든 회원 이름의 XOR을 여러 질의에 대해 출력한다.
문제
2120년에도 "2120 신촌지역 대학생 프로그래밍 대회 동아리 연합 여름대회"가 성공적으로 개최된다. 올해 HI-ARC에서는 총 N명의 학회원이 참가를 희망한다. HI-ARC의 운영진은 서로 다른 정수로 수치화된 모든 학회원의 "실력" 정보를 가지고 있으며, 이를 바탕으로 다음과 같이 팀을 구성한다.
- 정확히 a개의 팀이 대회에 참가하며, 각 팀의 팀원은 M명이다.
- 실력이 높은 상위 b명은 이번 대회의 출제진이 된다. 따라서 남은 N − b명의 학회원이 이번 대회에 참가할 수 있는 후보다.
- 후보 중 M × a명을 골라 최강의 팀 구성을 만든다. 한 팀의 "강력함"은 그 팀의 모든 팀원들의 실력의 곱으로 정의된다. 최강의 팀 구성은 모든 팀의 "강력함"의 합이 최대가 되는 구성이다.
HI-ARC에서는 대회 참가의 독려를 위해 모든 팀에게 소정의 상품권을 제공하는 이벤트를 준비하기로 하였다. 각 팀이 받는 상품권의 액수는 팀원들의 이름을 Bitwise XOR한 값과 같다. 알다시피 2120년 대한민국에서 모든 사람의 이름은 10^9 이하의 자연수이다.
문제는 한 팀의 팀원 수인 M은 이미 결정되었지만, 아직 a와 b는 확정되지 않았다는 것이다. 따라서 HI-ARC 운영진은 상품권을 총 얼마나 준비해야 할지 예산 계획을 세우는 데 어려움을 겪고 있다. 대회 준비로 바쁜 운영진을 대신하여, 다양한 a와 b의 후보에 대해서 준비해야 하는 상품권 액수의 총합을 구해보자.
입력
첫 번째 줄에 대회에 참가하는 학회원의 수 N과 한 팀의 팀원 수 M가 주어진다. (1 ≤ M ≤ N ≤ 100,000)
다음 N개의 줄에 걸쳐 각 학회원의 정보를 나타내는 정수 x, y가 주어진다. x는 이 학회원의 실력, y는 이 학회원의 이름이다. (1 ≤ x, y ≤ 10^9) 서로 다른 두 학회원의 x가 같은 경우는 없다.
다음 줄에 쿼리의 개수 Q가 주어진다. (1 ≤ Q ≤ 500,000)
다음 Q개의 줄에 쿼리의 정보를 나타내는 정수 a**i와 b**i가 주어진다. (1 ≤ a**i ≤ N, 0 ≤ b**i < N) 최강의 팀 구성을 만드는 방법이 하나인 쿼리들만 주어진다.
입력의 양이 많은 편이므로 빠른 입력 함수의 사용을 권장한다.
출력
i (1 ≤ i ≤ Q)번째 줄에 a = a**i이고 b = b**i일 때 준비해야 하는 상품권 액수의 총합을 출력한다.
힌트
Bitwise XOR은 두 값을 이진수로 표현하고 자리 단위로 적용되는 이진 연산자로, 두 피연산자의 각 자릿수를 비교하며 같으면 1, 다르면 0을 계산한다. C/C++, Java, Python에서 두 정수 x와 y의 Bitwise XOR 결과는 (x ^ y)로 계산 할 수 있다.