主席树
文章平均质量分 80
neither_nor
这个作者很懒,什么都没留下…
展开
-
BZOJ4535 [Hnoi2016]树
考虑每次复制操作,我们只需要知道复制这个子树的根以及原树就能知道新树里这一部分的形态,所以我们把每次复制操作复制的子树和最开始的一颗树都缩点,给每个缩点记录在原树里的根,父亲在原树里的编号。每个缩点和父亲缩点的距离为父亲在原树里与缩点父亲的根在原树里的距离+1,也就是这个缩点树的根到上一个缩点树的根在新树里的距离,维护原树和缩点树两个树倍增结构,询问的时候根据LCA在缩点树里的位置分类讨论即可原创 2016-04-29 13:49:30 · 853 阅读 · 0 评论 -
BZOJ4826 [Hnoi2017]影魔
对每个点i,单调栈求出左边和右边第一个大于i的位置,记为l[i]和r[i]那么(l[i],r[i])会产生p1的贡献左端点为l[i],右端点在[i+1,r-1]的点对都会产生p1的贡献右端点为r[i],左端点在[l+1,i-1]的点对都会产生p2的贡献将点对看成平面上的点,横坐标左端点纵坐标右端点,上述贡献分别对应单点加和线段加查询就是矩形求和用主席树维护即可#incl原创 2017-04-17 15:08:47 · 2187 阅读 · 3 评论 -
BZOJ2653 middle
中位数的话,可以考虑一下二分答案,然后把原序列转成01序列,看0和1的数量谁多就知道答案是大于mid还是小于mid了这样如果不强制在线可以整体二分但是强制在线了-_-好吧,我们考虑维护mid逐渐增长,那么每次会有一些点从0变成1,我们需要的是每次在某一个mid下查询区间的最大连续和之类的东西,那么我们用主席树维护每个mid的时候的01序列即可#include#include#i原创 2017-03-15 14:19:40 · 372 阅读 · 0 评论 -
BZOJ4771 七彩树
很厉害的题orz了网上的题解,大家似乎都在orz雯舞,那我也赶紧Orz吧,前两天刚在BZOJ把我超了-_-orzorz然后这题的话,先考虑没有深度的条件先令每个点的贡献都是1,那么如果有同色点,他们的lca的贡献就要减一,而我们知道取dfs序相邻的两个点的话lca最深,所以令同色点dfs序相邻的点贡献-1,然后答案就是子树和考虑深度限制,我们对于每一个i,维护只考虑所有深度考虑原创 2017-03-20 19:24:54 · 1891 阅读 · 0 评论 -
BZOJ4704 旅行
不知为何每次一看到树链第k个相关的问题就一副这道题我之前做过的感觉,然后又找不到这题-_-这题的话,对于第i年的询问,相当于有效的修改操作是到第i年为止的所有修改操作减去到第l年为止的所有修改操作,链剖加主席树维护一下修改操作然后用链剖在树上爬就行了……比较麻烦,代码写的很丑-_-#include#include#include#include#include#include#原创 2016-09-14 16:06:18 · 831 阅读 · 0 评论 -
BZOJ4504 K个串
考虑如果他是m组询问,每组询问问一个子串的数字之和的话怎么搞我们可以离线然后按右端点排序,然后枚举右端点,用一个线段树维护当前每个左端点的答案,假设现在右端点从i-1挪到i,第i个位置的数是x,那么x对答案的贡献是从x上一次出现的地方+1到i之间区间+x然后我们考虑这道题,由于k比较小,我们可以先算最大的,再算第二大的,一直算到第k大的为了知道每个子串的数字的和,我们用主席树来维护上边原创 2016-09-02 10:07:12 · 1262 阅读 · 0 评论 -
BZOJ4548 小奇的糖果
同3658 Jabberwocky双倍经验把内存开小点#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define MAXN 100010原创 2016-08-22 10:44:33 · 655 阅读 · 0 评论 -
BZOJ3956 Count
orz ljss……我们发现,以i为两个端点中较小的那个的好的点对最多有两个(以i为左端点一个,右端点一个)单调栈预处理所有好的点对然后二维数点即可#include#include#include#include#include#include#include#include#include#include#include#include#include#in原创 2016-09-09 09:54:07 · 718 阅读 · 0 评论 -
BZOJ4556 [Tjoi2016&Heoi2016]字符串
恩,我们进行一些瞎YY,首先询问s[a~b]的所有子串与S[c~d]的最长LCP其实相当于询问s[a~b]的所有后缀与s[c~d]的最长LCP进一步转化设suf[i]表示S的从第i个字符开始的后缀,则其实相当于询问这个可以把d-c+1提到外面,就变成这样只需要考虑左面的,考虑若答案为l(lb-l+1的位置,而在a=l,那么s[i~b]就是一个与s[c~d]有长度为l的LCP的子原创 2016-06-14 10:10:42 · 1440 阅读 · 0 评论 -
BZOJ3221 [Codechef FEB13] Obserbing the tree树上询问
闲来无事水一发毒瘤题链剖+主席树即可区间加一个等差数列标记合并的时候把首项和公差都加起来就好了因为区间修改所以要标记永久化,除了标记以外还要记录子树内因更改所增加的和#include#include#include#include#include#include#include#include#include#include#include#include#原创 2016-06-17 14:47:25 · 953 阅读 · 0 评论 -
BZOJ3626 [LNOI2014]LCA
链剖,由于询问是询问一段区间内的所以我们建主席树,造两颗主席树,一个维护点的个数,一个维护点的深度和,对于每个点x,往根走,每走一条轻边到达轻边的父亲结点f,就在主席树上给f的点个数+1,深度和+f的深度(默认刚开始是走了一条轻边到达点x的)查询的时候每走一条轻边到达一条重链上的结点x,求出重链上x和x以下有多少个点,再减去从来那条轻边底下来的点的个数,剩下这些点和询问点的lca都是x,用点的原创 2016-07-02 13:54:44 · 501 阅读 · 0 评论 -
BZOJ3658 Jabberwocky
考虑对于向上包含和向下包含分开计算不包含所有颜色即有一种颜色一定不包含,考虑枚举这个不被包含的颜色,计算向下包含的最大答案将所有同颜色的店以x为第一关键字y为第二关键字排序,然后枚举右端点,如果一个点在另一个点的右下方,那么左上方的点就没有用了,因为如果以他右边的点为右边界,他上边的点为上边界的话,左边界不可能在他左边。所以我们维护一个单调栈,加入一个点x的时候把所有y大于等于这个点的原创 2016-06-30 16:33:06 · 534 阅读 · 0 评论 -
BZOJ3489 A simple rmq problem
设第i个数上一次出现的位置为lst[i],下一次出现的位置为nxt[i],那么第i个数可以用作更新答案的条件就是lst[i]r&&l把lst,nxt和i分别看作三维坐标,问题就转化为了立方体求最大值对于二维情况,我们可以用二维线段树搞,现在是三维,但是我们发现lst这一维在查询的时候左端点一直为0(我觉得用接地这个词语来形容特别形象-_-),所以我们可以通过可持久化来维护第一维,由于外层进原创 2016-07-09 23:26:34 · 802 阅读 · 0 评论 -
BZOJ3551 [ONTAK2010]Peaks加强版
对于在图上限制最大边权的题,我们可以建一颗最小生成树,合并两个连通块的时候新建一个节点代表这条边,点权为边权,把两个连通块的子树都作为这个新点的儿子,然后用这个新点代表这个连通块然后点x通过边权不大于y的边能到达的点就是点x在新树上点权小于等于y的最高祖先所代表的子树,这个可以倍增查询于是就变成了查询子树K大,主席树即可#include#include#include#inclu原创 2016-05-14 14:43:39 · 519 阅读 · 0 评论 -
BZOJ4571 [Scoi2016]美味
区间最大异或值的经典做法是可持久化trie,但是加上一个数的话可持久化trie就变得非常的扯淡考虑可持久化trie其实可以等价为一颗上限为2^k-1的主席树,在trie上确定一位其实相当于将答案的区间缩小的一半,也就是在主席树上向下走一层当所有数加上x之后,我们在主席树上走的时候就不能直接调用siz[son[x][0]],但是因为所有数都被加了,所以我们其实要查询的是左子树的区间向前窜x位原创 2016-05-11 20:56:12 · 1916 阅读 · 0 评论 -
UOJ#218 【UNR #1】火车管理
遥想当年,xuruifan想用线段树套可持久化treap日这题,结果最后也只得了80分……为了不步xuruifan的后尘,我orz了题解我们可以用一个线段树来维护当前的所有栈顶元素,支持区间覆盖和区间求和然后我们维护一个主席树,维护每个版本的时候的栈顶元素,并维护每个栈顶元素被加入是在哪个版本,这样在区间压栈的时候我们可以区间赋值,在单点弹栈的时候我们可以先查到栈顶元素被加入的版本,然原创 2016-12-09 11:15:07 · 903 阅读 · 4 评论