아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

구간 연산

시간 제한1초메모리 제한128 MB

요약
k 미만 정수로 이루어진 배열에 구간 순환 증가를 적용하고 구간 합을 구합니다.
난이도

보통10점 중 6점

유형
세그먼트 트리
정답자
아직 제출이 없습니다

문제

정수 nn개로 이루어진 수열 a1,a2,…,ana_1, a_2, \dots, a_n이 주어진다. 각 원소는 [0,k−1][0, k-1] 범위의 정수이다. 이 수열에 대해 다음 두 종류의 연산을 모두 합쳐 mm번 수행한다.

  1. 구간 합 ac+ac+1+⋯+ada_c + a_{c+1} + \dots + a_d 를 출력한다.
  2. c≤i≤dc \le i \le d 를 만족하는 모든 aia_i 를 (ai+l) mod k(a_i + l) \bmod k 로 바꾼다.

입력

첫째 줄에 세 정수 nn, kk, mm 이 주어진다 (1≤n≤1000001 \le n \le 100000, 1≤k≤101 \le k \le 10, 1≤m≤1000001 \le m \le 100000). 둘째 줄에는 수열을 나타내는 nn개의 정수 a1,a2,…,ana_1, a_2, \dots, a_n 이 주어진다 (0≤ai≤k−10 \le a_i \le k-1).

이어지는 mm개의 줄은 각각 하나의 연산을 나타낸다. 각 줄은 연산의 종류를 나타내는 정수 zz 로 시작한다. z=1z = 1 이면 구간 합 질의이며, 뒤에 두 정수 cc, dd 가 이어진다. z=2z = 2 이면 구간 변경 연산이며, 뒤에 세 정수 cc, dd, ll 이 이어진다 (1≤c≤d≤n1 \le c \le d \le n, 0≤l≤k−10 \le l \le k-1).

출력

각 구간 합 연산마다 계산한 결과를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    4 3 6
    0 0 0 0
    2 1 1 1
    1 1 4
    2 1 2 1
    1 1 4
    2 1 3 1
    1 1 4
    
    예상 출력
    1
    3
    3