CF1515H口胡
居然一下就做出来了。。。不知道是不是对的/fad
考虑操作的本质,首先将所有元素插入线段树中。
来依次考虑每一种操作:
- 区间与
注意到这个操作类似将某些节点的右儿子合并到左儿子上,而一个节点最多被合并一次,所以可以暴力合并,如果没有兄弟那就打上标记。
- 区间或
和前者类似。
- 区间异或
这个操作是交换左右儿子,所以直接打上标记,前面没有兄弟的时候也可以打上相同的标记。
- 询问
这不是用脚维护一下就好了吗。
但是注意到这只对全局操作管用,所以考虑通过某种方式使得区间也管用。
首先将整个区间拆分成线段树上的区间。
对于一个区间,先进行上面的合并操作,再按照更高的位合并到别的区间上去。
但是如果是异或就很麻烦了。所以考虑将被修改的节点全部拉出来,修改完毕后再插入回去。
至于实现,我们注意到一次是对同一层的一车区间干相同的事。所以不妨对整颗线段树 BFS,然后在 BFS 序上开一颗平衡树,来维护没有被合并的点。
然后,将左右儿子合并的操作反过来,最后统一将区间打上异或标记。
一个节点会被合并 次,所以会被插入平衡树 次,所以复杂度应该是 的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】