UOJ#228.基础数据结构练习题
题目链接
这个题目就是让我们实现三个操作区间加,区间开方,区间求和。可以用势能线段树来写,也可以用分块来写。我们就用分块来写这个题。
我们先对整个序列进行预处理,将整个序列分成多个块
由于本题不同于单单只进行区间加的操作或者区间开方的操作,如果我们仅仅只有来维护这个区间能否继续暴力开方的话,是可以被卡掉的,如果我们一直开方开到之后,再进行一次区间加的操作,把所有的数都加到,那么就是出题人在的时间复杂度下,让我们继续进行次暴力,但是每一次的暴力复杂度又是的,所以很容易就被出题人卡时间了。如果只是单纯的区间开方不进行区间加的话,可以在的复杂度下完成区间开方。所以本题我们要多用和来维护区间最值,在开方的时候我们只需要去判断最大值和最小值是否相等,如果相等的话,我们计算开方前后的变化量是多少,然后我们对整块进行开方操作就简化成了对整块进行一次区间加法,所有的数都加上一个,这样就可以实现的时间复杂度下对整块进行开方的操作。采用区间最大值和最小值来实现区间开方的话,出题人想卡的话,就要用次操作去破坏所有块的最大值最小值的性质,这个时候我们的开方操作就会从退化为,所以采用这个方法的话,出题人卡我们的代价就会变大。
维护区间最值操作
其实就是将那个整块的标记先释放,然后重新求出,和。
操作一:区间加法
我们用和来维护这个区间的懒惰标记和整块的总和,并且才实现完区间加法的时候,要时刻更新我们的和,,,每一次都要及时的将懒惰标记向下释放,为的是维护最大值和最小值。
操作二:区间开方
判断区间最大值和区间最小值是否相等,从而来选择我们这个时候对区间开方的操作是暴力开方还是采用类区间加法来实现区间开方。
操作三:区间求和
区间求和操作就是很正常的操作了。
__EOF__

本文链接:https://www.cnblogs.com/Haven-/p/16200172.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现