
主席树
Chester_King
虽千万人,吾往矣。
展开
-
【POJ】2104 K-th Number 主席树
题目传送门主席树什么真的好迷啊……写一下自己对主席树的理解吧,好像就是一个线段树的前缀和。首先我们先建出一棵空树,作为之后线段树的基础。对每一个节点都建一棵线段树,但是也不是完全建出整棵线段树,而是对于不需要修改的节点就直接调用当前节点的对应节点作为儿子,对于需要修改的节点就建出新的节点作为儿子,并对新建出来节点进行修改。然后发现这样的数据结构就可以有求区间第k大等骚操作了。博主对于主席树还不是很熟原创 2017-10-11 21:44:04 · 292 阅读 · 0 评论 -
【BZOJ】3524 [Poi2014]Couriers && 【BZOJ】2223 [Coci 2009]PATULJCI 主席树
BZOJ3524BZOJ2223好久都没有接触主席树了,都已经忘的差不多了……说好的定期复习呢?主席树的还是像以前一样的前缀动态开点,如果当前主席树的左儿子容斥后的sum>r−l+12sum>\frac{r-l+1}{2},那么答案肯定在左儿子中;否则右儿子也是同样的判断,如果两个儿子都不满足,那么就是00。因为一个区间内出现次数c>r−l+12c>\frac{r-l+1}{2}的数最多只有一个,这原创 2017-12-17 20:27:15 · 401 阅读 · 0 评论 -
【BZOJ】2588 Spoj 10628. Count on a tree LCA+主席树
题目传送门如果是强制在线的话,那就只能用主席树了。这题的主席树建立方法也是挺好的,每个节点向它的父亲节点建立主席树。对于每个询问(x,y)(x,y),抓住x,y,lca(x,y),father[lca(x,y)]x,y,lca(x,y),father[lca(x,y)]这四个点,初始化这四个点在各自主席树的根部,然后用二分加容斥来更新这四个点在各自主席树上的位置——选择左儿子或右儿子,最后得到答案。原创 2017-12-18 21:19:30 · 245 阅读 · 0 评论 -
【BZOJ】3932 [CQOI2015]任务查询系统 主席树+差分
题目传送门这题嘛,就是主席树吧,把一个任务拆成两部分:任务开始的加入操作和任务结束的删除操作。(好像这就是差分了吧)然后如果两个操作在同一个时间点上发生,就直接对当前时间节点的树根进行修改;否则就在两个操作时间点之间的时间点上覆盖为前一个操作时间点的主席树根。(话说一开始我还不知道为什么要有这个覆盖的……智商已下线)然后就是一些普通的主席树操作了吧,直接写掉就行了。附上AC代码:#include <原创 2018-01-03 20:43:38 · 272 阅读 · 0 评论 -
【BZOJ】1901 Zju2112 Dynamic Rankings 树状数组+主席树
题目传送门树状数组套主席树什么的真的好迷啊……还是整体二分比较平易近人(大雾)。我们考虑主席树的修改,如果像以前一样前缀动态开点,那么修改一个点就要把后面的主席树全部重建,时间复杂度O(m×n×logn)O(m\times n\times\log n),和暴力差不多嘛……然后我们考虑在主席树外面套一个树状数组,这样既不会破坏前缀动态开点的性质,同时把时间复杂度降到了O(m×log2n)O(m\tim原创 2017-12-17 20:30:16 · 211 阅读 · 0 评论 -
【BZOJ】4504 K个串 主席树+堆
题目传送门 一个晚上就做了这么一道题……好颓啊…… 首先我们可以对于每个aia_i维护一个pre[ai]pre[a_i]表示在它之前与他最近的相同的数的位置。 然后对于每个aia_i,在(pre[ai],i)(pre[a_i],i)这个范围内都加上aia_i,可以用主席树。 题目要求kk个区间不相同,这就是“超级钢琴”的模型,套上超级钢琴的套路就行了。 附上AC代码: #inclu原创 2018-01-16 21:21:22 · 273 阅读 · 0 评论