维护数列
都是Splay比较常见的操作,平衡树节点维护是一个量:左右儿子,子树大小,节点代表的值(对于非哨兵来说,值等于输入的
注意事项:
1.副本值的作用:由于操作六要求非空,所以当数列中(除哨兵)的数都为负的时候,要输出数列中的最大值;而副本值就可以进行判断
2.两个懒标记的下放没有顺序要求
3.平衡树的一个很好的调试的方法,就是按照中学遍历遍历平衡树并且输出,看是否是理想的数列
4.内存回收:如果每次新建一个节点会MLE;考虑到删除的数的数量不会多于插入的数的数量,所以每次删除的时候我们遍历删除的子树,将所有节点的编号放入一个栈中,然后每次新建节点的时候编号从栈里面取,时间复杂度仍然优秀;如果利用指针的new
操作进行内存回收,那么一定要一开始就new
完(指new int[N]
),而不要需要的新建的时候就new
一下,这样子会超时间(可以认为前者的时间复杂度为new
完就没办法内存回收了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构