关于使用线段树完成区间翻转的一种做法,求证明或证伪
  • 板块灌水区
  • 楼主Exp10re
  • 当前回复3
  • 已保存回复4
  • 发布时间2024/3/25 17:58
  • 上次更新2024/3/25 20:20:42
查看原帖
关于使用线段树完成区间翻转的一种做法,求证明或证伪
403069
Exp10re楼主2024/3/25 17:58

很久之前想到的一个使用线段树实现区间翻转的做法,感觉时间复杂度很假,但是就是能过掉 P3391 【模板】文艺平衡树,甚至能在此基础上实现区间修改,觉得很假,特意来问一下。

做法大致是:对于一个节点的翻转,打一个翻转 tag,然后对于其所有子树,交换其左右儿子。

对于一个区间的翻转,找到这个区间中所有节点,将这些节点打上翻转 tag,将这些节点前后两两交换。

图示如下:

如果线段树中出现深度大于 Δ\Delta(一个常数)的节点,则将线段树 O(n)O(n) 重构。

时间复杂度最坏大概是 O(nqlog⁡(Δlog⁡n))\displaystyle O(\frac {nq} {\log(\frac {\Delta} {\log n})})?

不太会分析,大致情况就是每一次重构之后进行若干次操作,每一次将深度翻倍。

感觉很假,有什么卡掉的方法吗,又或者是这种做法是对的?

代码扔在这里。提前谢谢各位。

2024/3/25 17:58
加载中...