题目描述
花神喜欢步行游历各国,顺便虐爆各地竞赛。花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家)。
每一次旅行中,花神会选择一条旅游路线,它在那一串国家中是连续的一段,这次旅行带来的开心值是这些国家的喜欢度的总和。当然花神对这些国家的喜欢程度并不是恒定的,有时会突然对某些国家产生反感,使他对这些国家的喜欢度 δ 变为 ⌊δ⌋(可能是花神虐爆了那些国家的 OI,从而感到乏味)。
现在给出花神每次的旅行路线,以及开心度的变化,请求出花神每次旅行的开心值。
输入格式
第一行是一个整数 N,表示有 N 个国家;
第二行有 N 个空格隔开的整数,表示每个国家的初始喜欢度 δi;
第三行是一个整数 M,表示有 M 条信息要处理;
接下来 M 行,每行三个整数 x,l,r:
- 当 x=1 时,询问游历国家 l 到 r 的开心值总和,即 ∑i=lrδi;
- 当 x=2 时,将国家 l 到 r 中每个国家的喜欢度 δi 变为 ⌊δi⌋。
输出格式
对于每个 x=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 1 2,询问 [1,2] 的和 = 1+100=101。
- 第二个操作:
2 1 2,将 [1,2] 每个数开平方后下取整:
- 1→⌊1⌋=1
- 100→⌊100⌋=10
数列变为 [1,10,5,5]。
- 第三个操作:
1 1 2,询问 [1,2] 的和 = 1+10=11。
- 第四个操作:
2 2 3,将 [2,3] 每个数开平方后下取整:
- 10→⌊10⌋=3
- 5→⌊5⌋=2
数列变为 [1,3,2,5]。
- 第五个操作:
1 1 4,询问 [1,4] 的和 = 1+3+2+5=11。
数据范围
- 1≤n≤105
- 1≤m≤2×105
- 1≤l≤r≤n
- 0≤δi≤109
时间限制:1000 ms
内存限制:524288 KB
提示
一个数最多开平方 O(loglogvalue) 次就会变成 1,之后不再变化。因此可以暴力修改,但需要维护区间最大值来判断是否还需要继续开平方操作。
建议使用线段树维护区间和与区间最大值,修改时若区间最大值为 1 则跳过,否则递归到叶子进行开平方更新。