这周忙着去准备英语口语考试了,博客看的不多,codeforces打了一场。
权值线段树:
每个节点用来表示一个区间的数出现的次数,可以实现添加,查询一个数出现的次数,查询一段区间的数出现的次数,查询所有数的第k大值,如果是查询第k大值,就和右子树的总和比较;如果是查询第k小值,就和左子树的总和比较。
主席树:
主席树相比普通的线段树而言,主席树可持久化。只是在要修改的时候,先把要修改的那个结点复制出来,再进行修改,建立新的结点等等,作为新的版本。更新完之后,整棵数只会比原来多一条分支(分支上有新产生的结点)。
主席树+树状数组:Dynamic Rankings - 洛谷
主席树+树状数组可以实现动态修改。树状数组的每一个结点都是一棵线段树。单点修改,每次修改的时候,只需要修改其对应的O(logn)棵线段树就可以。需要注意的是,在进行离散化处理的时候,是对于所有出现过的值而言的,即包括插入,修改中出现过的值。整个线段树主要还是前缀和的思想。
线段树分治:
依靠时间轴来建立线段树,依靠并查集维护一个集合所属关系。这里要把所做的操作放到一个栈里,当退出的时候,撤销原操作,不能路径压缩,需要按秩合并。当遍历到当前节点所对应的信息,如果发现一条边的两个点在同一集合,那么它的孩子结点也一定不满足二分图的条件,直接输出"NO",如果遍历到叶子结点仍然满足条件,即为"Yes",最后回溯的时候要撤销操作所带来的影响。