
数据结构---树状数组
forezxl
水君一枚
展开
-
树状数组简介(洛谷P3368、P3374)
树状数组是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和。虽然树状数组的用途可以完全被线段树所替代,而且线段树所能做的比树状数组多得多,但是树状数组的常数是远远小于线段树的。因此当你写线段树被卡常时可以试试使用树状数组。而且树状数组的代码很短哦!原创 2017-08-04 16:45:48 · 457 阅读 · 0 评论 -
洛谷P3431 [POI2005]AUT-The Bus(BZOJ1537)
树状数组洛谷题目传送门BZOJ题目传送门神TM裸的二维偏序我没看出来把其中一维离散后,用另一维排序。然后树状数组维护就好了。代码:#include<cstdio>#include<cctype>#include<cstring>#include<algorithm>#define N 100005#define F inline...原创 2018-10-25 19:10:53 · 199 阅读 · 0 评论 -
BZOJ1452: [JSOI2009]Count(洛谷P4054)
树状数组BZOJ题目传送门洛谷题目传送门二位树状数组裸题,开ccc个二位树状数组就好了。代码:#include&lt;cctype&gt;#include&lt;cstdio&gt;#include&lt;cstring&gt;#include&lt;algorithm&gt;#define N 305#define M 105#define F inline原创 2018-10-15 18:58:54 · 115 阅读 · 0 评论 -
BZOJ2743 [HEOI2012]采花(洛谷P4113)
树状数组BZOJ题目传送门 洛谷题目传送门妙蛙对每个位置记一个nxtnxtnxt表示这个位置的数下一次出现的位置。刚开始从左往右扫一遍把所有出现两次及以上的数的第一个位置加1。把询问按左端点排序,每次移动左端点的时候撤掉nxt[l]nxt[l]nxt[l]的影响,加上nxt[nxt[l]]nxt[nxt[l]]nxt[nxt[l]]的影响,区间求和即可。可能讲得不是很清楚,看代码...原创 2018-08-28 19:39:19 · 174 阅读 · 0 评论 -
洛谷P4514 上帝造题的七分钟(BZOJ3132)
二维树状数组洛谷题目传送门 BZOJ题目传送门学了一发二维树状数组。维护序列区间修改的树状数组用了差分数组,那么维护矩阵修改的二维树状数组也一样。设d[i][j]=a[i][j]−a[i−1][j]−a[i][j−1]+a[i−1][j−1]d[i][j]=a[i][j]−a[i−1][j]−a[i][j−1]+a[i−1][j−1]d[i][j]=a[i][j]-a[i-1][j]...原创 2018-08-28 19:32:08 · 286 阅读 · 0 评论 -
BZOJ5157 [Tjoi2014]上升子序列(洛谷P3970)
树状数组 DPf[i]f[i]f[i]表示以iii结尾的上升子序列个数。那么有f[i]=∑j<i,a[j]<a[i]f[j]+1f[i]=∑j<i,a[j]<a[i]f[j]+1f[i]=\sum_{ja[i]a[i]a[i]的f[i]f[i]f[i]的和,因为要去重,每次要减掉之前位置的f[i]f[i]f[i]。最终答案还要减掉长度为1的个数。代码:#incl...原创 2018-08-14 14:33:30 · 237 阅读 · 0 评论 -
BZOJ3179 [Coci2012]RASPORED
树状数组题目传送门 学考爆炸飞天 %%%ZZP YY一下就会发现最大肯定是按T从小到大做。因为每单位时间每个订单减少的贡献相同。 修改就是把T的位置改变一下,我们用两个树状数组来实现。具体见代码:#include<cctype>#include<cstdio>#include<cstring>#include<algorithm&...原创 2018-07-01 20:35:01 · 240 阅读 · 0 评论 -
BZOJ1103: [POI2007]大都市meg(洛谷P3459)
树状数组 DFS序BZOJ题目传送门 洛谷题目传送门刚开始连完边后DFS一遍求出它们的DFS序。对于每个节点在它的左端点+1,右端点-1。这样询问就转化成了区间和(题目保证编号大的在编号小的下面)。修成公路的话把编号大的还原(左端点-1,右端点+1)即可。树状数组维护。代码:#include<cctype>#include<cstdio>#incl...原创 2018-05-10 19:54:21 · 216 阅读 · 0 评论 -
BZOJ2434: [NOI2011]阿狸的打字机(洛谷P2414)
AC自动机 树状数组BZOJ题目传送门 洛谷题目传送门可以发现整个操作过程就是建立一颗Trie树。而查询第x个打印的字符串在第y个打印的字符串中出现的次数其实就是查询有多少个y的节点的fail指针指向在x的结束节点。我们把fail树建起来,把y都打上1,就会发现询问变成在x结束节点所在的子树和。那么dfs序之后用树状数组维护一下就好了。代码:#include<queue...原创 2018-03-29 17:58:02 · 212 阅读 · 0 评论 -
BZOJ3192: [JLOI2013]删除物品(洛谷P3253)
树状数组BZOJ题目传送门 洛谷题目传送门一道很巧妙的题目所以我太菜根本想不到去看题解了。首先按什么顺序移动最优:当然是大的先移喽。 可以考虑两棵平衡树模拟,但是高级数据结构实在太烦,于是我们想用简单的方法。 我们把第一个序列倒过来,然后和第二个拼起来。这道题就变成按照大小顺序计算与中间的两个“堆顶”之间的距离。我们把有记为1,无记为0。那么其实就是询问区间和并且单点修改。树状数...原创 2018-02-24 14:49:35 · 259 阅读 · 0 评论 -
codeforces 992E. Nastya and King-Shamans
树状数组 二分题目传送门题目大意: 维护一个数列,每次操作为先修改一个数,再询问是否存在一个位置iii满足w[i]=sum[i−1]w[i]=sum[i-1]w[i]=sum[i−1]并输出这个位置。妙蛙问题要求出满足 Ax=sumx−1A_x=sum_{x−1}Ax=sumx−1 的位置,这个可以转化为 sumx=2sumx−1sum_x=2sum_{x−1}sumx=2sumx...原创 2018-11-06 21:16:38 · 390 阅读 · 0 评论