线段树合并就是把两个维护相同区间的线段树合并到一块. 什么叫维护相同区间?就是每次操作的最大的那个区间是一样的,根节点维护的区间一样,根节点的左儿子维护的也一样,右儿子维护的也一样,左儿子的左儿子.... 显然只需要建树的时候都建成一样的就好了.一般我们采用动态开点. 由于线段树合并的均摊复杂度是l ...
分类:
其他好文 时间:
2019-03-08 09:25:52
阅读次数:
240
感谢这篇博客( "这里跳转" )以及邱宇大神的讲解,我也算作入门(自闭)了。 需要掌握的前置知识点:动态开点线段树、权值线段树。 一、合并思想 线段树合并,就是指建立一颗新的线段树,保存原有的两颗线段树的信息。 那么就是: 假设现在合并到了线段树的a、b某一个pos 如果a在这个区间有pos,b没有 ...
分类:
其他好文 时间:
2019-03-07 14:11:56
阅读次数:
138
Description 给定一个长度为 $n$ 的排列,有 $m$ 次操作,每次选取一段局部进行升序或降序排序,问你一波操作后某个位置上的数字是几 Hint $1~\leq~n,~m~\leq~10^5$ Solution 有两种做法,一种在线一种离线,这里把在线部分讲得更清楚点吧…… 考虑离线算法 ...
分类:
编程语言 时间:
2019-02-26 17:29:40
阅读次数:
212
题目传送门 思路: 区间合并线段树的题,第一次写,对于一颗子树,无论这个子树怎么交换,都不会对其他子树的逆序对造成影响,所以就直接算逆序对就好。 注意叶子节点是1到n的全排列,所以每个权值都只会出现1次,合并很好写。 注意动态开点,最多n个叶子节点,然后每次查询用到log个子树节点,(这句话似乎有语 ...
分类:
其他好文 时间:
2019-02-23 01:00:25
阅读次数:
215
可并堆有一种黑科技是用线段树合并实现,还能可持久化,时间复杂度nlogn。 这里介绍左偏树。 d值表示走右边到叶子的距离。满足d[r] <= d[l] 写法上用rt维护根节点,类似线段树。 放一个模板。 namespace lt { int ls[N], rs[N], siz[N], d[N], r ...
分类:
其他好文 时间:
2019-02-22 10:20:50
阅读次数:
169
链接 大意: 给定序列, 每次操作将区间[l,r]中的x全改为y, 最后输出序列 权值范围比较小, 对每个权值开一颗线段树, 每次将x合并到y上即可 ...
分类:
其他好文 时间:
2019-02-21 00:02:12
阅读次数:
283
给定$n$个数对$A_i,B_i$。你可以进行任意次以下两种操作:
1. 选择一个位置$i$,令$A_i=A_i+1$,花费$B_i$。必须存在一个位置$j$,满足$A_i=A_j,\ i\neq j$,才可以进行。
2. 选择一个位置$i$,令$A_i=A_i-1$,花费$-B_i$。必须存在一个... ...
分类:
其他好文 时间:
2019-02-14 13:32:54
阅读次数:
155
P3521 [POI2011]ROT-Tree Rotations 本题可以通过合并数据结构解决。 权值线段树合并的时间复杂度为O(nlogn)。 证明: ? n个节点相互独立。 ? 考虑合并节点的意义:两棵线段树在当前区间内都有值且新的树在当前区间的值相对原来两棵树的值都增加了。 ? 说明对于一个 ...
分类:
其他好文 时间:
2019-02-13 20:51:12
阅读次数:
143
链接 https://www.luogu.org/problemnew/show/P1552 思路 忍者数量肯定越多越好 那就从下到上的合并它的孩子 左偏树的话 顺便维护一个tot,大头堆,如果tot大于了m,把大的删掉 如果左偏树忘干净了或者没学的话 线段树合并也是个不错的选择 直接权值线段树合并 ...
https://vjudge.net/problem/HYSBZ-2733 给一些带权点,有些点是互相连通的, 然后给出2种操作,在两点间加一条边,或者询问一个点所在的连通块内的第k小值的编号 并查集辅助+splay的启发式合并就行 由于结构简单,动态开点线段树合并也可以做 我写的是splay,由于 ...
分类:
其他好文 时间:
2019-02-10 10:45:02
阅读次数:
171