筑波大学プログラミングコンテスト2025
コンテスト日時
2025/11/16 (Su) 13:15 - 16:45

E - Range Division and SUM Queries

Ceylon
3.5
s
1024
MB
400

問題文

長さ $N$ の非負整数列 $A=(A_1,A_2,\cdots,A_N)$ が与えられます。以下の2種類のクエリを合計 $Q$ 回順番に処理してください。

  • 1 l r x : $A_l,A_{l+1},\cdots,A_r$ を、それぞれ $\displaystyle \left\lfloor \frac{A_l}{x} \right\rfloor,\left\lfloor \frac{A_{l+1}}{x} \right\rfloor,\cdots,\left\lfloor \frac{A_r}{x} \right\rfloor$ に更新する。
  • 2 l r : $\displaystyle \sum_{i=l}^r A_i$ を出力する。

ただし、 $\lfloor a \rfloor$ は $a$ 以下の整数のうち最大のものを表します。

制約

  • 入力は全て整数
  • $1\leq N \leq 10^5$
  • $1\leq Q \leq 2\times 10^5$
  • $0\leq A_i \leq 10^{9}\quad (1\leq i\leq N)$
  • $1\leq l \leq r\leq N$
  • $1\leq x \leq 10^{9}$

入力

入力は以下の形式で与えられる。

$N\quad Q$
$A_1\quad A_2\quad \cdots\quad A_N$
$\rm{query_1}$
$\rm{query_2}$
$\vdots$
$\rm{query_Q}$

ここで、$\rm{query_i}$ は $i$ 番目に処理するクエリである。各クエリは以下のいずれかの形式で与えられる。

$1\quad l\quad r\quad x$

$2\quad l\quad r$

出力

問題文の指示に従ってクエリへの答えを改行区切りで出力せよ。

入力例 1
6 6 20 30 14 26 30 2 2 1 3 1 2 6 5 2 1 5 1 2 3 6 1 4 5 4 2 3 6
出力例 1
64 39 2

はじめ、 $A=(20,30,14,26,30,2)$ です。
1番目のクエリについて、 $A$ の1番目から3番目の要素は $20,30,14$ です。 これらの和は $64$ なので。 $64$ を出力します。
2番目のクエリについて、 $A$ の2番目から6番目の要素は $30,14,26,30,2$ です。 これらをそれぞれ $6,2,5,6,0$ に更新します。 更新後の数列は $A=(20,6,2,5,6,0)$ です。
3番目のクエリについて、 $A$ の1番目から5番目の要素は $20,6,2,5,6$ です。 これらの和は $39$ なので、 $39$ を出力します。
4番目のクエリについて、 $A$ の2番目から3番目の要素は $6,2$ です。 これらをそれぞれ $1,0$ に更新します。 更新後の数列は $A=(20,1,0,5,6,0)$ です。
5番目のクエリについて、 $A$ の4番目から5番目の要素は $5,6$ です。 これらをそれぞれ $1,1$ に更新します。 更新後の数列は $A=(20,1,0,1,1,0)$ です。
6番目のクエリについて、 $A$ の3番目から6番目の要素は $0,1,1,0$ です。 これらの和は $2$ なので、 $2$ を出力します。

入力例 2
4 1 2 0 2 5 1 1 4 10
出力例 2

クエリ2が1つも与えられないことがあります。

入力例 3
2 2 1000000000 0 1 1 2 1 2 1 2
出力例 3
1000000000
提出
C++23 (g++ 12.2.0)