
主席树
主席树
HOWARLI
自己选择的路,就算跪着也要走完!
展开
-
【JZOJ 4614】字符串
DescriptionSolution先用SA,把rank和sa数组弄出来, 现在二分一个mid表示答案,再二分找出在最左和最右边界L,R,使L和R为在rank中,与后缀c的最长公共前缀>=mid,再用主席树找出在这个rank区间内,是否有后缀在原来的序列中在a~(b-mid+1)之间,也就是是否有区间是合法的, 第二个二分可以用RMQ来找最长公共前缀, 复杂度:O(nlog2(n))原创 2016-07-13 16:51:27 · 742 阅读 · 0 评论 -
【JZOJ 4623】搬运干草捆
Solution题解说用splay来解,我不会,我用贪心, 显然的,在使当前答案最优的同时,也要保证当前做到的最后一个干草的高度最高, 把每个修改后高度一样的干草合成一个块,设每个干草原高度为aia_i,修改后的为bib_i。 我们先来考虑局部的解: 当前做到i, 如果bi−1=aib_{i-1}=a_i,直接合并上去, 如果bi−1>aib_{i-1}>a_i,新原创 2016-07-14 17:23:04 · 904 阅读 · 0 评论 -
支持修改主席树
主席树很经典,一般的”k-th number”问题都用它来解决, 主席树的内存存储与可持久化线段树差不多, 但如果要兹瓷修改呢?把有关的点都改一遍?兹瓷修改主席树 觉得兹瓷修改主席树与主席树没有太大的关系用树套树来实现, 内存上的存储外面是树状数组,套一个线段树,(注意,是线段树) 修改就和树状数组的求和修改差不多,只是把普通的加减修改变成了修改对应的线段树, 查询时,我们是先走线段原创 2016-07-18 10:30:27 · 1316 阅读 · 0 评论 -
【NOIP 2016 提高组】天天爱跑步
DescriptionSolution1设一个点的深度为did_i,巡查的时间为WiW_i, 一个人的路径起点为s,LCA为z,终点为t,总共用时T, 把路径拆成向上和向下两段, 那么,如果这个人上升到点x时他被看到,一定符合:ds=dx+Wxd_s=d_x+W_x, 同样,当他下降时如被点x看到,一定符合:dt−T=dx−Wxd_t-T=d_x-W_x 所以每个点的答案就是子树中的某个值原创 2016-11-30 20:20:50 · 1047 阅读 · 0 评论 -
【JZOJ 5229】【GDOI2018模拟7.14】小奇的糖果
Description有 N 个彩色糖果在平面上。小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果。求出最多能够拾起多少糖果,使得获得的糖果并不包含所有的颜色。Solution1 指向【一大堆常犯的错误、提醒和公式】的第20条; 枚举每个颜色,把向上取和向下取分开讨论, 对于向上取,显然是先找最高的,把它以上的其他颜色点取完,再向这个点在坐标中位置的左边右边分治下去,这个用主席树原创 2017-07-15 21:40:23 · 675 阅读 · 0 评论 -
【JZOJ 5295】【清华集训2017模拟】Create
DescriptionSolution题目有一个比较显然的性质:因为我们不停的把连续的一段变成一个数的话,那么全局不同的数会越来越少;换句话说,就是如果我们在区间修改时,对于一个数都相同的区间我们才能修改,这样均摊下来复杂度并不是很高,所以,现在的问题就变成了:如何快速求一段数相同的区间内对答案的贡献,设这个区间的值为c,那么只有v小于等于c的三元组才有可能有贡献, 而贡献为多少,则是这个区间被这原创 2017-08-18 21:40:47 · 508 阅读 · 0 评论 -
【JZOJ 5296】【清华集训2017模拟】Sequence
Solution发现,那个条件2其实没有用,可以用主席树预处理一下,转为数值在x,y之间, 那么这题就变成了求二维平面上的第k大, 这个用整体二分即可,复杂度:O(nlog(n)2)O(n\log(n)^2)Code#include <cstdio>#include <cstdlib>#include <algorithm>#define fo(i,a,b) for(int i=a;i<=原创 2017-08-19 09:34:04 · 459 阅读 · 0 评论