A93496.求和与替换

提高+/省选-

官方

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

D(x)D(x) 表示正整数 xx 的正约数个数。例如,D(2)=2D(2)=222 能被 1122 整除),D(6)=4D(6)=466 能被 11223366 整除)。

给定一个包含 nn 个整数的数组 aa。你需要处理两种类型的操作:

  1. REPLACE ll rr:对于每一个 lirl\le i\le r,将 aia_i 替换为 D(ai)D(a_i)
  2. SUM ll rr:计算 i=lrai\sum_{i=l}^{r} a_i

每次 SUM 操作需要输出结果。

输入格式

第一行包含两个整数 nnmm1n,m31051\le n,m\le 3\cdot 10^5)。

第二行包含 nn 个整数 a1,a2,,ana_1,a_2,\ldots,a_n1ai1061\le a_i\le 10^6)。

接下来 mm 行,每行包含 33 个整数 ti,li,rit_i,l_i,r_i

  • ti=1t_i=1,表示 REPLACE lil_i rir_i
  • 否则表示 SUM lil_i rir_i

保证至少有一次 SUM 操作。

输出格式

对于每个 SUM 操作,输出一行结果。

输入输出样例

  • 输入#1

    7 6
    6 4 1 10 3 2 4
    2 1 7
    2 4 5
    1 3 5
    2 4 4
    1 5 7
    2 1 7
    

    输出#1

    30
    13
    4
    22
    

说明/提示

样例解释

  • 第一次 SUM:6+4+1+10+3+2+4=306+4+1+10+3+2+4=30
  • 第二次 SUM:10+3=1310+3=13
  • 执行一次 REPLACE(3,5) 后:把 a3,a4,a5a_3,a_4,a_5 替换成它们的约数个数
  • 后面同理,按操作顺序计算即可
首页