数据结构
  • 板块学术版
  • 楼主EastPorridge
  • 当前回复14
  • 已保存回复14
  • 发布时间2022/9/26 23:15
  • 上次更新2023/10/27 09:50:13
查看原帖
数据结构
230865
EastPorridge楼主2022/9/26 23:15

今天 VP abc 的 Ex题 写到的。要求支持区间推平,区间整除,查询区间和,数据范围 5×1055 \times 10^5

看到区间推平就来劲了,胡了一个纯纯的珂朵莉树上去,结果 TLE 了四个点,TLE 的点都是 width_max_txt ,怀疑查询区间块数过多,尝试了一下定期重构,还是不行,所以开始摆烂,想到可以拿线段树来查询均摊一下珂朵莉树的垃圾复杂度,所以就有了一个奇怪的想法:

因为区间推平可以用线段树稳定实现,所以每次 整除操作和区间推平 时,都重构一遍 split 出来的左右端点中间的块,归并成一块一块的整块,再用线段树进行区间推平。

相当于把定期重构换成了遇上修改操作就重构一遍修改操作中间的所有块,用线段树再维护一遍。查询就直接 O(log)O( \log ) 的做。

复杂度看起来十分不正确,但过了,比纯暴力珂朵莉整整快了 6s 多,求 dalao 说一下这种乱搞的时间复杂度到底对不对,还是原本就有这种玩法只是我 native 了。

Code.

ps:原标题想叫《都什么年代了还在写传统势能线段树?!》太屑了,所以换了。

2022/9/26 23:15
加载中...