随笔分类 -  数据结构--树状数组

摘要:题目 给一棵基环树,求树上路径长度 \(\ge k\) 的路径条数。 分析 点分治+基环树 \(Trick\) 首先基环树的一个基本处理办法就是先断掉一条环上的边,当成树处理后,再考虑这一条边的贡献。 这里就是必须经过这一条边的路径。 我们可以考虑这一条边的两端子树,显然就相当于拼接两条路径。 对于 阅读全文
posted @ 2021-05-07 11:34 __Anchor 阅读(73) 评论(0) 推荐(0)
摘要:题目 CF522D Closest Equals 分析 回滚莫队/莫队+根号分治/线段树。 这道题和回滚莫队板题维护的信息正好相反,显然也是可以回滚莫队的。 但是会被卡,但是发现这个题目求的东西和区间数颜色的套路很像,于是可以考虑线段树/树状数组。 于是我们考虑离线询问,把询问挂到右端点上,然后就是 阅读全文
posted @ 2021-04-27 12:05 __Anchor 阅读(78) 评论(0) 推荐(0)
摘要:题目 P4175 [CTSC2008]网络管理 树上单点修改,查询路径第 k 大。 解答 这道题做法很多,有 树剖+线段树+平衡树+二分 的,也有 树剖+可持久化线段树+树状数组 的,也有 可持久化线段树+差分+树状数组 的,还有就是 整体二分+树剖 的。 复杂度都是几个 \(log\) 的做法。 阅读全文
posted @ 2021-04-23 23:58 __Anchor 阅读(47) 评论(0) 推荐(0)
摘要:P1903 [国家集训队]数颜色 / 维护队列 区间数颜色和单点修改。 可以树套树,但是不太会。 也可以考虑带修莫队,相当于就是多维护了一个时间轴。 排序方法变成先按块排序 \(l,r\) ,再按照 \(t\) 来排序即可。 单点修改里的 \(swap\) 很妙。 代码: #include<bits 阅读全文
posted @ 2021-04-21 20:54 __Anchor 阅读(79) 评论(0) 推荐(0)
摘要:P1972 [SDOI2009]HH的项链 经典区间数颜色问题。 离线做法有树状数组和莫队,在线做法有主席树。 莫队做法十分暴力,直接维护每个数当前的 cnt 再在单点更新的时候更新答案即可。 树状数组做法: 对于每一个位置维护一个前缀位置 \(pre\),那么询问就相当于是询问区间多少个位置的 \ 阅读全文
posted @ 2021-04-21 20:49 __Anchor 阅读(82) 评论(0) 推荐(0)
摘要:CF163E e-Government(AC 自动机+ BIT + dfn 序 + LCA + 序列上差分) 这么多东西搞在一起其实也没有很难。。 其实我们可以发现,题目就是让我们求每一个串作为某个串的子串出现次数之和。(好像更难理解了。) 看一下样例就知道了.. input: 1 3 a aa a 阅读全文
posted @ 2021-04-19 20:12 __Anchor 阅读(57) 评论(0) 推荐(0)
摘要:P2336 [SCOI2012]喵星球上的点名(AC 自动机 + BIT + dfn 序 + LCA ) 这道题除了 AC 自动机中 Fail 树本身的性质,与其他题目最大不同是它 AC 自动机的建立。 这道题的字符集特别大,所以我们不能和以前一样直接存下来,于是可以想到用 Map 维护每个点可以到 阅读全文
posted @ 2021-04-19 20:10 __Anchor 阅读(89) 评论(0) 推荐(0)
摘要:P5840 [COCI2015]Divljak(AC自动机+LCA+BIT) 我们发现对 \(T\) 集合建 AC 自动机非常的不好做(又要动态),所以我们考虑对 \(S\) 建 AC 自动机,然后每个 \(T\) 加入的时候都相当于修改一些节点的权值。 这里我们可以差分一下,把求点转化成求子树和, 阅读全文
posted @ 2021-04-19 20:09 __Anchor 阅读(88) 评论(0) 推荐(0)
摘要:P5459 [BJOI2016]回转寿司 给定一个序列,求有多少个子区间满足区间和大于等于 \(L\) 且小于等于 \(R\) 。 像这样的区间信息可以拆分成前缀和的,也就是具有区间可减性的信息,我们可以直接求一遍前缀和。 然后我们发现题目就变成了求点对数量了,而且这里很明显就是一个二维偏序问题,求 阅读全文
posted @ 2021-04-16 21:27 __Anchor 阅读(105) 评论(0) 推荐(0)
摘要:BZOJ2141/BSOJ3904 排队 题意:给定一个序列,求逆序对个数,每次可以交换两个数。(\(n\leq 2*10^4\) ,\(m\leq 2*10^3\)) 直接先处理第一次的答案,然后再考虑交换对答案的贡献。 因为 $n,m$都很小,所以可以直接暴力查询每次改变的量即可。 时间复杂度 阅读全文
posted @ 2021-04-13 14:46 __Anchor 阅读(43) 评论(0) 推荐(0)
摘要:P1975 [国家集训队]排队 P1975 [国家集训队]排队 对于一个长度为 n 的序列进行 k 次操作,每次操作都是交换序列中的某两个数。对于每一个操作,回答当前序列中有多少个逆序对。 树状数组套权值线段树直接维护,考虑每次修改的贡献即可。 view code #include<bits/std 阅读全文
posted @ 2021-04-12 16:32 __Anchor 阅读(100) 评论(0) 推荐(0)
摘要:P4054 [JSOI2009]计数问题 P4054 [JSOI2009]计数问题 一道三维偏序就因为数据变成了三维树状数组的水题... 对每个权值开一个二维树状数组,然后暴力修改暴力询问即可。 view code #include<bits/stdc++.h> using namespace st 阅读全文
posted @ 2021-04-12 16:17 __Anchor 阅读(69) 评论(0) 推荐(0)
摘要:P4396 [AHOI2013]作业 P4396 [AHOI2013]作业 CDQ分治+树状数组或者莫队+树状数组。 CDQ分治做法: 第一问很简单,就是区间询问大于等于一个数且小于等于一个数的个数,容易发现这就是二维偏序。 然后发现第二问就是矩阵数颜色,那么我们沿用 HH的项链 这道题的经典思路, 阅读全文
posted @ 2021-04-12 16:13 __Anchor 阅读(80) 评论(0) 推荐(0)