수열과 쿼리 7

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

요약
각 쿼리 구간에서 합이 K로 나누어떨어지는 가장 긴 연속 부분 수열의 길이를 구한다.
난이도

어려움10점 중 8점

유형
누적 합, 분할 정복, 해시맵
정답자
아직 제출이 없습니다

문제

길이가 NN인 수열 A1,A2,…,ANA_1, A_2, \dots, A_N과 정수 KK가 주어진다. 다음 쿼리를 처리하는 프로그램을 작성하시오.

  • l r: l≤i≤j≤rl \le i \le j \le r이면서 (Ai+Ai+1+⋯+Aj) mod K=0(A_i + A_{i+1} + \cdots + A_j) \bmod K = 0인 가장 긴 연속 부분 수열의 길이를 출력한다. 조건을 만족하는 부분 수열이 없으면 길이는 0이다.

입력

첫째 줄에 수열의 크기 NN (1≤N≤100 0001 \le N \le 100\,000)과 KK (2≤K≤1 000 0002 \le K \le 1\,000\,000)가 주어진다.

둘째 줄에 A1,A2,…,ANA_1, A_2, \dots, A_N이 주어진다. (1≤Ai≤1 000 000 0001 \le A_i \le 1\,000\,000\,000)

셋째 줄에 쿼리의 개수 MM (1≤M≤100 0001 \le M \le 100\,000)이 주어진다.

넷째 줄부터 MM개의 줄에 걸쳐 쿼리 ll, rr가 한 줄에 하나씩 주어진다. (1≤l≤r≤N1 \le l \le r \le N)

출력

각 쿼리의 답을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    5 10
    2 3 5 2 3
    2
    1 3
    2 4
    
    예상 출력
    3
    3