만드는 중입니다

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

디버그

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

요약
각 호출은 주어진 간격의 배수인 모든 인덱스를 1씩 증가시킨다. 완성된 배열에서 구간 합 질의에 답한다.
난이도

보통10점 중 5점

유형
배열, 수학, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

Seán은 자기가 쓴 코드를 디버그하고 있다. 먼저 정수 NN개짜리 배열 seq를 만들고 전부 0으로 채운다. 그다음 C++로 작성한 아래 함수를 여러 번 호출한다.

void something( int jump ) {
 int i = 0;
 while( i < N ) {
   seq[i] = seq[i] + 1;
   i = i + jump;
 }
}

이 함수는 인덱스가 jump의 배수인 원소를 모두 1씩 늘린다. 인덱스 0은 모든 jump의 배수라서 호출할 때마다 seq[0]이 1씩 늘어난다.

Seán은 함수를 정확히 KK번 호출하고, 인자로 X1,X2,…,XKX_1, X_2, \dots, X_K를 이 순서대로 넘긴다.

호출이 모두 끝나면 Seán은 확인하고 싶은 구간 QQ개를 고른다. 각 구간은 왼쪽 끝 LL과 오른쪽 끝 RR (L≤RL \le R)로 정해진다. 구간마다 seq[L] + seq[L+1] + ... + seq[R]을 구하라.

입력

첫째 줄에 배열의 크기 NN과 함수 호출 횟수 KK가 주어진다 (1≤N≤1061 \le N \le 10^6, 1≤K≤1061 \le K \le 10^6).

둘째 줄에 함수로 넘기는 인자 X1,X2,…,XKX_1, X_2, \dots, X_K가 공백으로 구분되어 주어진다 (1≤Xi<N1 \le X_i < N).

셋째 줄에 확인할 구간의 개수 QQ가 주어진다 (1≤Q≤1061 \le Q \le 10^6).

이어지는 QQ개 줄에 각 구간의 두 정수 LiL_i와 RiR_i가 주어진다 (0≤Li≤Ri<N0 \le L_i \le R_i < N).

출력

QQ개 줄을 출력한다. ii번째 줄에는 seq[L_i] + seq[L_i + 1] + ... + seq[R_i]의 값을 출력한다.

예제3

  1. 예제 1

    입력
    10 4
    1 1 2 1
    3
    0 9
    2 6
    7 7
    
    예상 출력
    35
    18
    3
    
  2. 예제 2

    입력
    11 3
    3 7 10
    3
    0 10
    2 6
    7 7
    
    예상 출력
    8
    2
    1
    
  3. 예제 3

    입력
    1000000 6
    12 3 21 436 2 19
    2
    12 16124
    692 29021
    
    예상 출력
    16422
    28874