社区讨论

关于使用线段树完成区间翻转的一种做法,求证明或证伪

灌水区参与者 5已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lu6rzbob
此快照首次捕获于
2024/03/25 17:58
2 年前
此快照最后确认于
2024/03/25 20:20
2 年前
查看原帖
很久之前想到的一个使用线段树实现区间翻转的做法,感觉时间复杂度很假,但是就是能过掉 P3391 【模板】文艺平衡树,甚至能在此基础上实现区间修改,觉得很假,特意来问一下。
做法大致是:对于一个节点的翻转,打一个翻转 tag,然后对于其所有子树,交换其左右儿子。
对于一个区间的翻转,找到这个区间中所有节点,将这些节点打上翻转 tag,将这些节点前后两两交换。
图示如下:
如果线段树中出现深度大于 Δ\Delta(一个常数)的节点,则将线段树 O(n)O(n) 重构。
时间复杂度最坏大概是 O(nqlog(Δlogn))\displaystyle O(\frac {nq} {\log(\frac {\Delta} {\log n})})
不太会分析,大致情况就是每一次重构之后进行若干次操作,每一次将深度翻倍。
感觉很假,有什么卡掉的方法吗,又或者是这种做法是对的?
代码扔在这里。提前谢谢各位。

回复

4 条回复,欢迎继续交流。

正在加载回复...