각 호출은 주어진 간격의 배수인 모든 인덱스를 1씩 증가시킨다. 완성된 배열에서 구간 합 질의에 답한다.
보통5배열수학누적 합구현아직 제출이 없습니다시간 제한3초메모리 제한512 MBSeán은 자기가 쓴 코드를 디버그하고 있다. 먼저 정수 N개짜리 배열 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은 함수를 정확히 K번 호출하고, 인자로 X1,X2,…,XK를 이 순서대로 넘긴다.
호출이 모두 끝나면 Seán은 확인하고 싶은 구간 Q개를 고른다. 각 구간은 왼쪽 끝 L과 오른쪽 끝 R (L≤R)로 정해진다. 구간마다 seq[L] + seq[L+1] + ... + seq[R]을 구하라.
첫째 줄에 배열의 크기 N과 함수 호출 횟수 K가 주어진다 (1≤N≤106, 1≤K≤106).
둘째 줄에 함수로 넘기는 인자 X1,X2,…,XK가 공백으로 구분되어 주어진다 (1≤Xi<N).
셋째 줄에 확인할 구간의 개수 Q가 주어진다 (1≤Q≤106).
이어지는 Q개 줄에 각 구간의 두 정수 Li와 Ri가 주어진다 (0≤Li≤Ri<N).
Q개 줄을 출력한다. i번째 줄에는 seq[L_i] + seq[L_i + 1] + ... + seq[R_i]의 값을 출력한다.