题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4027
题目大意:
给你一个初始序列a[i],然后有两个操作,一个是询问区间的和,一个是将区间里的每一个数变为原来的平方根,向下取整。操作数<=100000
思路
给定的数初始最大为\(2^{63}\),那么我们最多取6次平方根就可以将其变为1,变成1之后不管怎么取都是1,所以考虑使用线段树维护一个区间最大值,当最大值为1时这个区间就不用计算了,不为1时就暴力递归更新结点的值。
因为取平方根的次数很少所以暴力递归更新的次数也很少不会超时。
不知道线段树的可以看看我之前写的线段树入门:https://startcraft.cn/post/a7bbcc60.html#more
https://blog.csdn.net/lalala445566/article/details/89440830
该题有一个坑点,数据给的区间可能l>r
AC代码
1 |
|