随笔分类 -  数据结构--主席树

摘要:$n \leq 100000$的字符串,多次问一个区间有多少位置不同的回文串。 先插空做一次manacher,得到每个字符往左右延伸的长度$f$数组。如ACAA变*A*C*A*A*,那么所有*的$f_k$实际对应的回文串数是$\frac{f_k}{2}$(一定整除),否则是$\frac{f_k+1} 阅读全文
posted @ 2018-07-12 15:52 Blue233333 阅读(233) 评论(1) 推荐(0)
摘要:$n \leq 300000$的一个排列,每次能交换相邻两个数,并且有一次机会交换不相邻的两个数,可以不用这个机会。问使这个排列升序最少操作几次。 如果没有“不相邻”,那就是当年入门的时候学的逆序对了。也就是说,这次机会希望把逆序对数尽可能减少。把排列变成点放在二维平面上,$(i,a_i)$,可以发 阅读全文
posted @ 2018-07-12 08:55 Blue233333 阅读(569) 评论(0) 推荐(0)
摘要:n<=10000个数m<=10000次操作:1、L~R中有多少种数字,2、单点修改,修改次数<=1000。 一种通法是记pre[i]表示i前最近的和a[i]相等的数字,然后问题变成:[L,R]中有多少个pre[i]<L。 方法一:pre数组的动态维护可以用set。对每个数开一个set存所有出现位置, 阅读全文
posted @ 2017-12-14 13:25 Blue233333 阅读(321) 评论(0) 推荐(0)
摘要:n<=100000个带权区间,m<=100000个询问,每次问覆盖某个点的所有区间的权值的前K小的和,强制在线。 差分一下就变主席树了嘛。。然而调了半天。。 (若是此题入门可以看下其他人的博客) 1 #include<stdio.h> 2 #include<string.h> 3 #include< 阅读全文
posted @ 2017-12-03 21:17 Blue233333 阅读(133) 评论(0) 推荐(0)
摘要:n<=100000,m<=500000的图有点权边权,q<=500000个询问每次问从x出发经过不超过y的边权能到的点权第K大,加强版强制在线。 Emmmmmm有一个漂亮的方法来转化,就是对原图做MST,做的时候要连接两个点时不要直接连,新开一个点然后让这两个点连上这个点。 这样就把边权挂到树上了, 阅读全文
posted @ 2017-12-01 19:34 Blue233333 阅读(227) 评论(0) 推荐(0)
摘要:n<=100000的点权树,有m<=100000个询问,每次问两个点间的第k小点权,保证有解,强制在线。 主席上树啦!类似于之前的序列不带修改询问的前缀表示法,现在只要把前缀当成某点到根的信息即可。然后比如要问x点和y点,z为lca(x,y),w为z的爸爸,那么x,y,z,w四棵线段树一起跑即可。 阅读全文
posted @ 2017-11-30 07:14 Blue233333 阅读(166) 评论(0) 推荐(0)
摘要:n<=500000个数,m<=500000个询问,每次问区间里出现次数>(R-L+1)的数字是谁,没有输出0. 写了带修改发现不会不带修改了。。。。 不带修改的话,n个点,每个点表示一个前缀,每加入一个数时,主席树上只有logn个节点的信息,所以每次只用新建logn个节点,那前缀对应线段树里其他的信 阅读全文
posted @ 2017-11-29 20:55 Blue233333 阅读(183) 评论(0) 推荐(0)
摘要:n<=10000的序列做m<=10000个操作:单点修改,查区间第k小。 所谓的主席树也就是一个值域线段树嘛。。不过在这里还是%%fotile 需要做一个区间查询,由于查第k小,需要一些能够支持数值操作的东西,那就选择值域线段树,线段树上每个区间[L,R]表示的是值在L~R的数的相关信息,比如这里的 阅读全文
posted @ 2017-11-29 16:18 Blue233333 阅读(148) 评论(0) 推荐(0)