제한된 메모리
시간 제한7초메모리 제한4 MB
선형 점화식으로 만든 거대한 배열을 저장하지 않고 여러 번의 k번째 원소 질의에 답한다.
문제
정수 개로 이루어진 배열 가 있습니다. 배열의 원소를 직접 주지 않고, 아래 규칙으로 생성합니다.
쿼리는 정수 하나로 주어지고, 배열 에서 번째로 작은 원소를 묻습니다. 여기서 는 0-based 인덱스입니다. 즉 이면 가장 작은 원소, 이면 두 번째로 작은 원소입니다. 같은 값이 여러 번 나타나면 나타난 횟수만큼 따로 셉니다.
정렬한 다음 답을 읽으면 끝나는 문제로 보이지만, 메모리 제한이 배열 전체를 담기에는 너무 작습니다. 대신 쿼리 개수는 적어서 쿼리 정보는 전부 저장할 수 있습니다.
, , , 와 쿼리 목록이 주어집니다. 배열 를 만드는 의사 코드는 다음과 같습니다.
X[0] = x0
for i = 1 to N-1:
X[i] = (X[i-1] * a + b) % 1000000007
곱셈 중간값이 32비트를 넘으니 오버플로에 주의하세요.
모든 쿼리의 답을 더한 값을 출력하는 프로그램을 작성하세요.
입력
첫째 줄에 정수 , , , 가 공백으로 구분되어 주어집니다. (, )
둘째 줄에 쿼리의 개수 가 주어집니다. ()
셋째 줄에 쿼리를 나타내는 정수 개가 공백으로 구분되어 주어집니다. ()
출력
모든 쿼리의 답을 더한 값을 한 줄에 출력합니다. 이 값은 보다 작으므로 64비트 정수에 들어갑니다.