수열과 띄엄띄엄 쿼리

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

요약
d가 6 이하일 때 A_l, A_{l+d}, ..., A_r 형태의 등차 인덱스 집합에 구간 갱신과 구간 합 쿼리를 처리한다.
난이도

어려움10점 중 8점

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

문제

진우는 무언가를 띄엄띄엄 하는 것을 좋아한다. 그래서 연속된 구간에 다음과 같이 띄엄띄엄 쿼리를 처리한다.

  • 1 l r d x: A_l,,A_l+d,,A_l+2d,,⋯ ,,A_rA\_l,\\, A\_{l+d},\\, A\_{l+2d},\\, \cdots,\\, A\_r에 각각 xx를 더한다. (−109≤x≤109,1≤l≤r≤N,1≤d≤6,(r−l)(-10^9\leq x\leq 10^9, 1\leq l\leq r\leq N,1\leq d\leq 6,(r-l)는 dd의 배수))
  • 2 l r d: A_l+A_l+d+A_l+2d+⋯+A_rA\_l + A\_{l+d} + A\_{l+2d} + \cdots + A\_r의 값을 출력한다. (1≤l≤r≤N,1≤d≤6,(r−l)(1\leq l\leq r\leq N,1\leq d\leq 6, (r-l)는 dd의 배수))

쿼리를 보고도 수행을 미루고 있는 진우 대신 위 쿼리를 수행하는 프로그램을 작성하시오.

입력

첫 번째 줄에 배열의 길이 NN과 쿼리의 개수 QQ가 공백으로 구분하여 주어진다. (1≤N≤105,1≤Q≤50,000)(1\leq N\leq 10^5, 1\leq Q\leq 50\\,000)

두 번째 줄에 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots ,A\_N이 공백으로 구분하여 주어진다. (−109≤A_1,A_2,⋯ ,A_N≤109)(-10^9\leq A\_1,A\_2,\cdots,A\_N\leq 10^9)

세 번째 줄부터 QQ개의 줄에 걸쳐 쿼리가 한 줄에 하나씩 주어진다.

출력

첫 번째 줄부터 22번 쿼리가 주어질 때마다 정답을 한 줄에 하나씩 순서대로 출력한다. 22번 쿼리는 적어도 한 번 이상 주어진다.

예제1

  1. 예제 1

    입력
    5 6
    1 2 3 4 5
    2 1 5 1
    2 1 5 2
    1 1 4 3 2
    1 1 5 2 2
    2 1 5 1
    2 1 5 2
    
    예상 출력
    15
    9
    25
    17