思路
要求线段树实现:
- 区间求和
- 区间开方
我们发现,对于一个不全是0或1的区间,我们对每个数开方后的和只能暴力计算,无法优化。但我们发现即便是10^9的数字也会在6次内变成1(因为取了floor),而0,1开方后是不会再变化的,因而对于全是0,1的区间做开方后的区间和同样是不会再变化的。所以对全是0或1的区间我们记录一个flag,更新碰到flag就直接退出不用再更新。为什么这样的时间复杂度能够保证?我们已经知道10^9的数字最多开方6次,因而对于10^5的每个点,最多只有六次更新是有效的(其他直接O(1)continue了),所以时间复杂度是6*10^5,因而完全能接受。
代码
1 |
|