만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

다섯

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

요약
배열이 주어질 때 구간 안의 a_i에 해당하는 x 값의 합을 10^8+543으로 나눈 나머지로 구하고, 구간의 a_i에 값을 더하는 연산을 처리합니다.
난이도

어려움10점 중 8점

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

문제

예상치 못한 사정으로 이 문제는 다섯 번째가 아니다.

여론조사 기관 "Ko & co"가 최근 실시한 설문에서 1부터 4까지의 숫자를 좋아하는 사람이 없다는 결과가 나왔다. 그래서 다음 숫자인 55에 집중하고, 이 숫자는 앞선 숫자들과 같은 불운을 겪지 않기를 바란다.

양의 인덱스와 음의 인덱스를 모두 갖는 다음 수열을 생각하자.

  • x0=0x_0 = 0
  • x1=1x_1 = 1
  • x2=2x_2 = 2
  • x3=3x_3 = 3
  • x4=4x_4 = 4
  • 모든 정수 kk에 대해 xk+5=5×xk+4+4×xk+3+3×xk+2+2×xk+1+1×xkx_{k+5} = 5 \times x_{k+4} + 4 \times x_{k+3} + 3 \times x_{k+2} + 2 \times x_{k+1} + 1 \times x_k

이 등식은 양의 인덱스와 음의 인덱스의 값을 유일하게 정한다. 예를 들어 x5=40x_5 = 40, x6=230x_6 = 230이고, x−1=−22x_{-1} = -22, x−2=33x_{-2} = 33이다.

이벤트

nn개의 수로 이루어진 배열 a1,a2,…,ana_1, a_2, \dots, a_n이 주어진다. 다음 두 종류의 이벤트를 처리하는 프로그램 five를 작성하라.

  • 매개변수 ll, rr을 받는 Query. ∑i=lrxai\sum_{i=l}^r x_{a_i}를 구한다. 값이 매우 커질 수 있으므로, 답을 M=108+543M = 10^8 + 543으로 나눈 나머지를 출력한다.
  • 매개변수 ll, rr, valuevalue를 받는 Update. 모든 l≤i≤rl \le i \le r에 대해 aia_i의 값을 ai+valuea_i + value로 바꾼다.

입력

첫 줄에 nn과 qq가 주어진다. 다음 줄에는 nn개의 정수 a1,a2,…,ana_1, a_2, \dots, a_n이 주어진다. 이어지는 qq개의 줄에는 각각 세 개의 자연수 typetype, ll, rr이 주어진다.

  • type=1type = 1이면 해당 줄은 Query이다.
  • type=2type = 2이면 해당 줄은 Update이며, 정수 valuevalue가 하나 더 주어진다.

출력

Query마다 답을 한 줄에 출력한다.

제한

  • 1≤n≤100 0001 \le n \le 100\,000
  • 1≤q≤200 0001 \le q \le 200\,000
  • 1≤l≤r≤n1 \le l \le r \le n
  • −M<ai,value<M-M < a_i, value < M

시간 제한은 700 ms, 메모리 제한은 1024 MB이다.

예제1

  1. 예제 1

    입력
    1 5
    1
    1 1 1
    2 1 1 -2
    1 1 1
    2 1 1 8
    1 1 1
    
    예상 출력
    1
    100000521
    1330