#xDSybttg040303. 1550:花神游历各国

1550:花神游历各国

题目描述

花神喜欢步行游历各国,顺便虐爆各地竞赛。花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家)。

每一次旅行中,花神会选择一条旅游路线,它在那一串国家中是连续的一段,这次旅行带来的开心值是这些国家的喜欢度的总和。当然花神对这些国家的喜欢程度并不是恒定的,有时会突然对某些国家产生反感,使他对这些国家的喜欢度 δ\delta 变为 δ\lfloor\sqrt{\delta}\rfloor(可能是花神虐爆了那些国家的 OI,从而感到乏味)。

现在给出花神每次的旅行路线,以及开心度的变化,请求出花神每次旅行的开心值。


输入格式

第一行是一个整数 NN,表示有 NN 个国家;

第二行有 NN 个空格隔开的整数,表示每个国家的初始喜欢度 δi\delta_i

第三行是一个整数 MM,表示有 MM 条信息要处理;

接下来 MM 行,每行三个整数 x,l,rx, l, r

  • x=1x = 1 时,询问游历国家 llrr 的开心值总和,即 i=lrδi\sum_{i=l}^{r} \delta_i
  • x=2x = 2 时,将国家 llrr 中每个国家的喜欢度 δi\delta_i 变为 δi\lfloor\sqrt{\delta_i}\rfloor

输出格式

对于每个 x=1x=1 的询问,输出一行一个整数,表示这次旅行的开心度。


样例

输入样例 1

4
1 100 5 5
5
1 1 2
2 1 2
1 1 2
2 2 3
1 1 4

输出样例 1

101
11
11

样例解释

初始喜欢度:[1,100,5,5][1, 100, 5, 5]

  1. 第一个操作:1 1 2,询问 [1,2][1, 2] 的和 = 1+100=1011 + 100 = 101
  2. 第二个操作:2 1 2,将 [1,2][1, 2] 每个数开平方后下取整:
    • 11=11 \to \lfloor\sqrt{1}\rfloor = 1
    • 100100=10100 \to \lfloor\sqrt{100}\rfloor = 10 数列变为 [1,10,5,5][1, 10, 5, 5]
  3. 第三个操作:1 1 2,询问 [1,2][1, 2] 的和 = 1+10=111 + 10 = 11
  4. 第四个操作:2 2 3,将 [2,3][2, 3] 每个数开平方后下取整:
    • 1010=310 \to \lfloor\sqrt{10}\rfloor = 3
    • 55=25 \to \lfloor\sqrt{5}\rfloor = 2 数列变为 [1,3,2,5][1, 3, 2, 5]
  5. 第五个操作:1 1 4,询问 [1,4][1, 4] 的和 = 1+3+2+5=111 + 3 + 2 + 5 = 11

数据范围

  • 1n1051 \le n \le 10^5
  • 1m2×1051 \le m \le 2 \times 10^5
  • 1lrn1 \le l \le r \le n
  • 0δi1090 \le \delta_i \le 10^9

时间限制:1000 ms
内存限制:524288 KB


提示

一个数最多开平方 O(loglogvalue)O(\log \log \text{value}) 次就会变成 11,之后不再变化。因此可以暴力修改,但需要维护区间最大值来判断是否还需要继续开平方操作。

建议使用线段树维护区间和与区间最大值,修改时若区间最大值为 11 则跳过,否则递归到叶子进行开平方更新。