KSA 수열과 쿼리

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

요약
구간에 1을 더하고 구간의 K로 나눈 나머지 합을 구하는 쿼리를 N이 2e6, Q가 2e4까지 주어질 때 처리한다.
난이도

보통10점 중 6점

유형
세그먼트 트리, 수학, 구현
정답자
아직 제출이 없습니다

문제

길이가 NN인 수열 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N과 정수 KK가 주어진다. 이때, 다음 쿼리를 QQ개 수행하는 프로그램을 작성해 보자.

  • 1 s_is\_i e_ie\_i: A_s_i,A_s_i+1,⋯ ,A_e_iA\_{s\_i}, A\_{s\_i+1}, \cdots, A\_{e\_i}에 11을 더한다.
  • 2 s_is\_i e_ie\_i: (A_s_i mod K)+(A_s_i+1 mod K)+⋯+(A_e_i mod K)(A\_{s\_i}\bmod K) +(A\_{s\_i+1}\bmod K) +\cdots +(A\_{e\_i}\bmod K)를 출력한다.

입력

첫 번째 줄에 두 개의 정수 NN, KK가 공백으로 구분되어 주어진다.

두 번째 줄에 NN개의 정수 A_1,A_2,⋯ ,A_NA\_1,A\_2,\cdots,A\_N이 공백으로 구분되어 주어진다.

세 번째 줄에 정수 QQ가 주어진다.

다음 QQ개의 줄에 쿼리들의 정보가 주어지며, 그 중 ii번째 줄에는 세 개의 정수 q_iq\_i, s_is\_i, e_ie\_i가 공백으로 구분되어 주어진다. q_iq\_i는 ii번째 쿼리의 종류를 나타낸다.

출력

q_i=2q\_i = 2인 쿼리에 대해 각 줄에 쿼리의 답을 한 줄에 하나씩 순서대로 출력한다.

제한

  • 1≤N≤2×1061\leq N\leq 2\times 10^6
  • 1≤K≤1091\leq K\leq 10^9
  • 1≤Q≤2×1041\leq Q\leq 2 \times 10^4
  • q_i∈1,2q\_i \in \\{1, 2 \\}
  • 1≤s_i≤e_i≤N1\leq s\_i \leq e\_i \leq N
  • 0≤A_i≤1090\leq A\_i\leq 10^9
  • q_i=2q\_i=2인 쿼리가 하나 이상 주어짐

예제1

  1. 예제 1

    입력
    6 3
    1 2 3 1 2 3
    7
    2 1 6
    1 1 4
    1 3 6
    2 1 4
    1 1 2
    2 3 5
    2 1 6
    
    예상 출력
    6
    4
    2
    4