만드는 중입니다

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

수열 생성

시간 제한10초메모리 제한2048 MB

요약
홀수로 이루어진 배열의 구간에 짝수 x를 더하고, 구간의 곱을 2^20으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 8점

유형
정수론, 비트 연산, 분할 정복
정답자
아직 제출이 없습니다

문제

길이가 nn인 수열 a1,a2,ldots,ana_1, a_2, \\ldots, a_n이 있으며, 모든 aia_i는 홀수임이 보장된다.

연산은 두 종류이다.

  1. ell\\ell, rr, xx가 주어지면, a_\\ell, a_{\\ell + 1}, \\ldots, a_r 각각에 짝수 xx를 더한다.
  2. ell\\ell, rr이 주어지면, a_\\ell, a_{\\ell + 1}, \\ldots, a_r의 곱을 구하고 그 값을 2202^{20}으로 나눈 나머지를 출력한다.

초기 수열과 연산이 주어졌을 때, 이를 효율적으로 처리하라.

입력

첫째 줄에 두 양의 정수 nn, qq (1leqn,qleq2cdot1051 \\leq n, q \\leq 2 \\cdot 10^5)가 주어진다. 각각 수열의 길이와 질의의 개수이다.

둘째 줄에는 홀수 a1,a2,ldots,ana_1, a_2, \\ldots, a_n (1leqai<2201 \\leq a_i < 2^{20})이 nn개 주어진다.

이후 qq개의 줄에는 다음 두 형식 중 하나의 질의가 주어진다.

  • 1 l r x: 첫 번째 연산을 수행한다 (1leqellleqrleqn1 \\leq \\ell \\leq r \\leq n, xx는 짝수이고 0leqx<2200 \\leq x < 2^{20}).
  • 2 l r: 두 번째 연산을 수행한다 (1leqellleqrleqn1 \\leq \\ell \\leq r \\leq n).

질의에 주어지는 값은 모두 정수이다.

출력

두 번째 형식의 질의마다 답을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    10 10
    969575 741825 24903 1047319 450475 256145 1045323 479255 810659 768323
    1 5 6 3034
    2 1 10
    2 1 9
    2 1 4
    1 3 6 126904
    2 5 5
    2 9 9
    1 7 7 853094
    1 4 9 1025178
    2 5 8
    
    예상 출력
    1045541
    1012343
    558151
    580413
    810659
    527353