만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

나무 키우기

시간 제한3초메모리 제한1024 MB

요약
매일 가장 작은 나무의 키를 두 배로 만들 때, X일 후 K번째로 작은 나무의 키를 10^9+7로 나눈 나머지로 구하는 문제입니다.
난이도

보통10점 중 7점

유형
그리디, 수학, 이분 탐색, 정렬
정답자
아직 제출이 없습니다

문제

현제는 일렬로 심어진 NN개의 나무를 키운다. 왼쪽부터 각 나무의 초기 높이는 A1A_1, A2A_2, ⋯\cdots, ANA_N이다.

현제는 첫 번째 날부터 매일 높이가 가장 작은 나무를 하나 골라 물을 준다. 물을 받은 나무의 높이는 2배가 된다. 높이가 가장 작은 나무가 여러 그루이면 그중 가장 왼쪽에 있는 나무에 물을 준다.

이때 아래 쿼리를 수행하는 프로그램을 작성하여라.

  • XX KK: XX번째 날까지 물을 주고 난 후, KK번째로 작은 나무의 높이를 109+710^9+7로 나눈 나머지를 구한다.

입력

첫 번째 줄에 나무의 수 NN이 주어진다. (1≤N≤300 0001 \le N \le 300\,000)

다음 줄에 나무의 초기 높이 A1A_1, A2A_2, ⋯\cdots, ANA_N이 공백으로 구분되어 주어진다. (1≤Ai≤300 0001 \le A_i \le 300\,000)

다음 줄에 쿼리의 수 QQ가 주어진다. (1≤Q≤300 0001 \le Q \le 300\,000)

이어서 QQ개의 줄에 쿼리의 정보 XX, KK가 공백으로 구분되어 주어진다. (1≤X≤1091 \le X \le 10^9; 1≤K≤N1 \le K \le N)

모든 입력은 정수이다.

출력

각 쿼리의 정답을 입력된 순서대로 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    5
    3 6 4 2 7
    10
    1 1
    2 2
    3 3
    4 4
    10 5
    5 5
    6 1
    7 2
    8 3
    9 4
    
    예상 출력
    3
    4
    6
    8
    24
    12
    7
    8
    12
    16