Day3(数据结构)

线段树

[NOI2017]整数https://www.luogu.org/problemnew/show/P3822

思路:

线段树,每位存1/0,加法时将a中二进制表示下为1的位取出,分别加入序列,寻找x位左边最靠近x的0,对这个位置到x位进行区间反转,进行进位操作,线段树分别维护一段区间最右的0和1的位置,打懒标记,此时时间复杂度O(n*log(1e7)*log(a))

考虑优化,上述做法将a的二进制表示拆开,若想降低这个log(a)的复杂度,选择暴力将需要修改的这32位数取出,与a直接计算,将计算后的结果放回序列,进位只需在本次处理的最高位进一次。暴力取数的复杂度为log(a)+log(1e7),从而将复杂度变为一个log,可过。

 

KD-Tree

[CQOI2016]K远点对(https://www.luogu.org/problemnew/show/P4357

[APIO2018] Circle selection 选圆圈(https://www.luogu.org/problemnew/show/P4631

平衡树

 

[BJOI2017]喷式水战改 (https://www.luogu.org/problemnew/show/P3991)

[NOI2017]蔬菜 (https://www.luogu.org/problemnew/show/P3826

可持久化线段树/主席树

猜你喜欢

转载自www.cnblogs.com/wifimonster/p/10214620.html