树状数组
文章平均质量分 50
seeeagull
这个作者很懒,什么都没留下…
展开
-
[cf1405E]Fixed Point Removal(平衡树+树状数组)
编号为1-n的纸牌,按一定顺序排列,每次可以移走放在第i个且编号为i的纸牌,右边的自动向左补齐。每次询问限定了左边x张和右边y张不能动,问最多移走多少张。好像和电脑里的“纸牌”有点像?为了移走尽量多的话,如果同时有多张可以拿,显然应该先拿最右边的,这样保证其他已经可以被拿的牌不受影响,且可能产生更多能被拿走的牌。每次先拿走一张,之后右边所有牌序号-1,这个操作似乎让我们想到了平衡树。如果不考虑多次有限制的询问,只考虑原始序列能拿走多少张,显然简单的平衡树操作就可以处理。考虑如果有限制,会影响拿牌原创 2020-09-09 10:14:27 · 379 阅读 · 0 评论 -
[P2617]Dynamic Rankings(树状数组+主席树)
求带修区间第k小。如果是静态的区间第k小,可以离散化后建主席树维护一个前缀和,查询时在线段树上差分一下就能得到一段区间内某范围点的个数,判断是跳到左子树还是右子树;如果是修改前缀和,可以用树状数组。那么要是把一棵树看作区间上一个点,似乎就可以树套树来做带修的区间第k小了。首先做一下离散化,然后从1到n来用树状数组添加每个点的影响,就相当于把树状数组上的一次加法变成线段树上的一次单点修改。然后每...原创 2019-05-21 20:06:14 · 210 阅读 · 0 评论 -
[P4175][CTSC2008]网络管理(LCA+树状数组+主席树)
求树上链的带修第k大,跟我上一篇的区间带修第k大其实思路差不多。区别见下。只要先dfs一遍记录dfs序,就可以看成一个序列了。每个节点对应的线段树要维护从它到根的不同权值个数,所以每个节点会对以它为根的子树产生影响,所以树状数组修改时是区间修改而不再是单点修改。u到v的路径=u+v-lca(u,v)-lca(u,v)的父亲,所以查询时是四个位置一起跳。其他就没什么特别的了。#includ...原创 2019-05-22 10:03:02 · 137 阅读 · 0 评论 -
[P3332][ZJOI2013]K大数查询(树套树)
感觉跟Dynamic Rankings差不多,但是需要区间修改。可以考虑分别维护两个树状数组,Σroot[1~i]记录第i个位置目前都有哪些数,Σroot1[1~i]记录第i个位置分别和前面i-1个位置的差的和。这样修改时就差分变成了单点修改,查询时用root中的值*位置的序号-root1中的值求出从第1个到所求位置的数的个数和,再加上和上面那道题一样的树状数组和主席树的操作就可以了。...原创 2019-06-17 14:42:49 · 253 阅读 · 1 评论