随笔分类 -  主席树

摘要:Anton and Permutation 题意:给定一个 1-n的排列, 现在有m次操作, 每次操作交换 a[l],a[r] 求交换完之后整个序列的逆序对数是多少。 题解: 树状数组套主席树去维护。 感觉是一个主席树 + 树状数组套动态开点的线段树啊。 好久没写主席树了 都不会写了。。。 每次交换 阅读全文
posted @ 2018-08-18 09:41 Schenker 阅读(246) 评论(0) 推荐(0) 编辑
摘要:Count on a tree 题意:求路径 u到v上的 第k小的权重。 题解:先DFS建数, 然后对于每个节点往上跑出一颗主席树, 然后每次更新。 查询的时候, u, v, k, 找到 z = lca(u,v) , p = anc[z][0], 然后对于这条路上左边子节点的个数就可以被表示为u,v 阅读全文
posted @ 2018-05-27 15:08 Schenker 阅读(166) 评论(0) 推荐(0) 编辑
摘要:SPOJ - 3267 主席树的又一种写法。 从后端点开始添加主席树, 然后如果遇到出现过的元素先把那个点删除, 再更新树, 最后查询区间就好了。 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define Fopen freopen("_i 阅读全文
posted @ 2018-05-26 21:08 Schenker 阅读(135) 评论(0) 推荐(0) 编辑
摘要:Dynamic Rankings 带修改的区间第K大其实就是先和静态区间第K大的操作一样。先建立一颗主席树, 然后再在树状数组的每一个节点开线段树(其实也是主席树,共用节点), 每次修改的时候都按照树状数组的方式去修改,并且修改那些地方。查询的时候就是查询原主席树+树状数组的值。 代码: 1 #in 阅读全文
posted @ 2018-05-26 13:04 Schenker 阅读(185) 评论(0) 推荐(0) 编辑
摘要:主席树的实质其实还是一颗线段树, 然后每一次修改都通过上一次的线段树,来添加新边,使得每次改变就改变logn个节点,很多节点重复利用,达到节省空间的目的。 1.不带修改的区间第K大。 HDU-2665 模板题 代码: 阅读全文
posted @ 2018-05-18 16:31 Schenker 阅读(249) 评论(0) 推荐(0) 编辑