题意:给N个数,进行两种操作:1.0 X Y
对第X和第Y个数之间的数开根号;2.1 X Y
对
第X和第Y个数之间的数求和。
开根号操作需要对区间内的每个数进行,才能使得区间的和得到更新。
没有想到的地方在于,\(2^{64}\)恰好需要开7次根号变为1,一个小于\(2^{63}\)的数最多开6次根号会变为1(如果最初的数>0),之后再开根号数值不会变化。
因此,可以得到的解法是,更新操作更新到叶结点,并记录线段树结点开根号的次数,如果次数>=6,则不再向下更新。也就是说,开始的时候每次更新都会更新到叶结点,复杂度为\(O(n)\),对整个区间更新6次后,复杂度变为\(O(logn)\).interesting…
坑:1.输入的Ei要用long long存,看题目描述integers Ei
,默认就用了int…
2.T X Y
操作,X可能大于Y,题目描述的是between X-th and Y-th
😄
1 |
|