Range Multiplication Sum

2 secs 1024 MB
bayashiko's icon bayashiko

問題文

長さ NN の整数列 A=(A1,A2,,AN)A=(A_1,A_2,\ldots,A_N) が与えられます。QQ 個のクエリを順に処理してください。
ii 番目のクエリでは、まず整数 TiT_i が与えられます。ここで、 TiT_i1122 のどちらかです。
次に、TiT_i の値に応じてクエリの内容を表す入力が与えられるので、以下のように処理してください。

  • Ti=1T_i=1 のとき
    整数 x,yx,y が与えられるので、 AxA_xyy に変更してください。
  • Ti=2T_i=2 のとき
    整数 l,rl,r が与えられるので、 i=lr1j=i+1r(Ai×Aj)\sum_{i=l}^{r-1} \sum_{j=i+1}^{r} (A_i×A_j)998244353998244353 で割った余りを出力してください。

  

制約

  • 2N2000002\leq N \leq 200000
  • 1Q2000001\leq Q \leq 200000
  • 0Ai9982443520\leq A_i \leq 998244352
  • Ti=1T_i=1 または Ti=2T_i=2
  • 1xN1\leq x \leq N
  • 0y9982443520\leq y \leq 998244352
  • 1l<rN1 \leq l < r \leq N
  • 入力は全て整数   

入力

入力は以下の形式で標準入力から与えられます。

N QN \ Q
A1 A2 ... ANA_1 \ A_2 \ ...\ A_N
Query1Query_1
Query2Query_2
:
QueryQQuery_Q

33 行目から Q+2Q+2 行目の QueryiQuery_i は以下のいずれかです。

1 x y1 \ x \ y

2 l r2 \ l \ r

  

出力

Ti=2T_i=2 の各クエリについて、改行区切りで答えを出力してください。

  

入力例1

6 4
4 1 8 2 6 9
2 2 4
2 4 6
1 6 0
2 4 6

出力例1

26
84
12

11 番目のクエリは i=23j=i+14(Ai×Aj)\sum_{i=2}^{3} \sum_{j=i+1}^{4} (A_i×A_j) を出力せよというものです。(1×8)+(1×2)+(8×2)=8+2+16=26(1×8)+(1×2)+(8×2)=8+2+16=26 なので、2626 と出力します。

22 番目のクエリは i=45j=i+16(Ai×Aj)\sum_{i=4}^{5} \sum_{j=i+1}^{6} (A_i×A_j) を出力せよというものです。(2×6)+(2×9)+(6×9)=12+18+54=84(2×6)+(2×9)+(6×9)=12+18+54=84 なので、8484 と出力します。

33 番目のクエリは A6A_600 に変更せよというものです。 A=(4,1,8,2,6,0)A=(4,1,8,2,6,0) となります。

44 番目のクエリは i=45j=i+16(Ai×Aj)\sum_{i=4}^{5} \sum_{j=i+1}^{6} (A_i×A_j) を出力せよというものです。(2×6)+(2×0)+(6×0)=12+0+0=12(2×6)+(2×0)+(6×0)=12+0+0=12 なので、1212 と出力します。

入力例2

2 1
998244352 998244352
2 1 2

出力例2

1

998244352×998244352=996491786299899904998244352×998244352=996491786299899904 ですが、 998244353998244353 で割った余りを出力する必要があることに注意してください。

提出


Go (1.21)