树状数组
zxyoi_dreamer
退役了退役了爬了爬了,搞个锤子算法竞赛,不如好好享受大学生活。
展开
-
【JOI 2020 Final】【LOJ3256】火灾(扫描线)(树状数组)
传送门题解:首先容易注意到询问可以查分为前缀询问。然后注意到询问本质上就是求 [i−T,i][i-T,i][i−T,i] 的最大值之和。一个比较直接的思路是考虑每个值在答案中出现了多少次,发现不好维护,不过这可以给我们一些启发。考虑统计每个位置上值的变化量。构造一个平面直角坐标系,横坐标表示序列中的下标,纵坐标表示时间,每个整点上有一个值表示 Sx(y)S_x(y)Sx(y)。初...原创 2020-04-01 11:46:39 · 717 阅读 · 0 评论 -
【校内模拟】矩阵求和(组合数转下降幂转自然幂)(斯特林数)(树状数组)
简要题意:一个 n×mn\times mn×m 矩阵,第 iii 行第 jjj 列的权值为 (i−1)⋅m+j(i-1)\cdot m + j(i−1)⋅m+j,需要你支持一下三种操作:R,交换两行C,交换两列Q,询问对一个子矩阵求 kkk 次二维前缀和后矩阵中元素之和。数据范围n,m,Q≤1e5,k≤10n,m,Q\leq 1e5,k\leq 10n,m,Q≤1e5,k≤10题...原创 2020-02-05 21:09:35 · 485 阅读 · 0 评论 -
【校内模拟】剪刀运送(树链剖分)(树状数组)(链加维护带权重心)
简要题意:给你一棵树。请你支持两个操作,链上加所有点权值+1,选择一个点并最小化它到所有点的距离乘上那个点的权值之和。每次修改后回答一次。保证树的形态随机。题解:std是一个需要树的形态随机的垃圾做法,丢掉不管。我们来考虑树的形态任意怎么做,同时我们把链上加权值的范围放宽到任意正数。首先发现要求的是带权重心。链加的时候,一个点作为带权重心的时候的权值可以用树剖+BIT或者直接一个L...原创 2019-10-31 15:21:54 · 340 阅读 · 0 评论 -
【APIO2019】路灯(矩形加)(CDQ分治)(树状数组)
传送门话说中国赛区有人AKAPIO么?感觉这题非常适合中国OI选手做啊。。。CDQ分治难道已经走到国际了么?不用CDQ就应该是用树套树,不是说外国选手数据结构水平人均线段树么(哦,他们pbds比较强来着题解:首先把询问(x,y)(x,y)(x,y)看作是一个点,然后把询问转成矩形加,然后set维护一下连续段,然后CDQ分治+树状数组解决三维偏序即可。。。所以这道题有难度么。。。中...原创 2019-10-28 16:52:24 · 331 阅读 · 0 评论 -
【GXOI/GZOI2019】旧词(树链剖分)(树状数组)
传送门题解:深度的kkk次方只是一个标志而已,把LCALCALCA深度的kkk次方换成LCALCALCA的其他什么属性求和也是可以做的。考虑枚举询问点到根的路径上每个点,考虑它被算多少次,实际上就是siz[i]−siz[pre]siz[i]-siz[pre]siz[i]−siz[pre]。其中sizsizsiz是子树中已经激活的点的数量,preprepre是路径上上一个点。直接HLD,...原创 2019-10-16 15:54:27 · 137 阅读 · 0 评论 -
【NOI2011】【BZOJ2434】【洛谷P2414】阿狸的打字机(AC自动机)(DFS序)(树状数组)
洛谷传送门BZOJ传送门题解:随手建立一个AC自动机,我们发现每个询问实际上就是问xxx的结尾在failfailfail树上的子树中有多少个点在传yyy上。于是我们有一个办法对于任意的iii,快速处理所有y=iy=iy=i的询问,只需要将这个串在Trie树上的所有点权值设置为1,然后对于所有的xxx,询问子树和就行了。由于这个AC自动机整体的大小是有保证,我们把所有询问挂在对应yyy上...原创 2019-07-15 14:19:17 · 136 阅读 · 0 评论 -
【校内模拟】fibonacci(斐波那契通项公式)(DFS序)(树状数组)(树上差分)
题面见校内OJ4695题解:首先利用斐波那契通项公式转化为等比数列求和。然后树上差分,考虑修改对询问的贡献,发现有一部分与询问点的深度无关,另一部分有关,分开维护即可。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs cons...原创 2019-09-07 23:10:35 · 185 阅读 · 0 评论 -
【BZOJ1461】字符串的匹配(KMP)(树状数组)
传送门题解:直接在匹配的时候记录一下当前考虑的位置的排名和个数,用树状数组支持修改和查询即可。失配的时候暴力删除。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnamespace IO{ inline cha...原创 2019-09-17 17:52:48 · 262 阅读 · 0 评论 -
【BZOJ3881】[Coci2015]Divljak(AC自动机)(树上差分)(树状数组)
传送门题解:对SSS建立AC自动机之后,我们发现一个PPP串扔进来就是把所有自己匹配点的祖先不重复地+1,显然树上差分搞定,用树状数组维护一下标记之和就行了。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnam...原创 2019-09-23 19:39:31 · 208 阅读 · 0 评论 -
【BZOJ4372】烁烁的游戏(动态点分治)(树状数组)
传送门题解:建立点分树,每个分治中心开一个树状数组,表示它对所有到它距离为ttt的点的贡献每次修改直接暴跳分治树父亲修改,发现父子分治中心会对一些点有重复贡献,每个儿子开一个树状表示它的连通块内距离父亲不超过ttt的点被重复贡献了多少。询问暴跳点分树查每一个分治中心的树状数组即可。代码:#include<bits/stdc++.h>#define ll long lo...原创 2019-09-27 14:42:22 · 189 阅读 · 0 评论 -
【CF1137F】Matches Are Not a Child's Play(LCT)(树状数组)
传送门题解:考虑树上最大值和次大值,显然链接它们的链最后删除,且一定是从次大值向最大值一个一个删除。显然我们可以把树拆成若干条链,每条链上的点的删除顺序从一个端点依次向另一个端点。注意到拆成链之后每条链内部的点是一起删除的,而链与链之间的删除顺序由链上最大值来决定。定最大值所在节点为根,容易发现修改就是make_root,询问的话需要知道最大值小于该链最大值的链的siz总和,以及这条链...原创 2019-09-29 08:41:54 · 139 阅读 · 0 评论 -
【Ynoi2011】D1T3(点分树)(树状数组)
传送门题解:考虑保留[l,r][l,r][l,r]的点的时候xxx所在的联通块怎么表示。考虑点分治的时候第一次把分治中心放到这个联通块里面的那次分治。取出这个分治中心,则统计颜色就变成了在它子树内部,只通过编号在[l,r][l,r][l,r]内的点能够到达多少种不同颜色。离线,二维数点,树状数组维护一下就没了。代码:#include<bits/stdc++.h>#d...原创 2019-10-01 20:06:20 · 430 阅读 · 0 评论 -
【YNOI2015】【洛谷P5070】即便看不到未来(相当暴力)(树状数组)
传送门题解:好奇怪啊这题居然在我的日推里面,MD,YNOI,我像是那么毒瘤的人吗?不过来都来了,就还是写了一下。询问离线,按照右端点排序。考虑一个位置一个位置地从左向右加入新的数。发现在第iii个位置加入的数能够产生的贡献,显然它只能更新满足以下条件的区间的答案:左端点在这个数上一次出现的位置之后,显然上一次出现的位置之前的区间已经包含了它,排序去重之后不改变答案。点的值与这个...原创 2019-06-19 19:48:42 · 375 阅读 · 0 评论 -
2019.04.01【校内模拟】Cac(圆方树)(DFS序)
传送门解析:仙人掌上路径问题考虑转换为圆方树上的问题。将所有点双和割边改造为方点会让这道题好写一点。现在考虑一条圆方树上的路径。考虑对所有方点维护加法标记,表示它的所有亲儿子的权值需要加上多少。加法标记对圆点无效。显然当路径LCA是方点的时候我们需要特殊处理一个圆点,拿一个桶来记录单独加了多少,每次修改只会有O(1)O(1)O(1)次这种操作,不会影响复杂度。对于询问我们在桶里面...原创 2019-04-01 21:37:19 · 236 阅读 · 0 评论 -
2018.09.26【TJOI2017】【BZOJ4888】【洛谷P3760】异或和(树状数组)(差分)
BZOJ传送门洛谷传送门解析:额,TJOITJOITJOI连续两年考了位运算。。。我还能说什么。。。PS:zxyoiPS:zxyoiPS:zxyoi不是天津oieroieroier。思路:一般位运算都是分开考虑。。。因为各位互不影响。。。但是这道题。。。这个加法啊。。。神TMTMTM进位啊。。。我第一次拿到还以为不可做。。。然后看了一下题解。是的,维护是否进位。首先我们...原创 2018-09-26 18:47:11 · 223 阅读 · 0 评论 -
2018.10.20【校内模拟】巧克力(TRIE)(DFS序)(树状数组)
传送门解析:神TM,OJ上又双叒叕卡栈空间,没办法手动开栈。。。思路:首先要发现一个性质,就是对于一个字符串,除了第一个#之前的前缀和最后一个#之后的后缀,其余部分是没有任何性质决定它的形态的。。。所以我们建立两颗TRIETRIETRIE树,直接将前缀和后缀插入到TRIETRIETRIE树里面,同时维护一下前缀TRIETRIETRIE上面的结尾位置在后缀TRIETRIETRIE上对应的...原创 2018-10-20 20:20:12 · 197 阅读 · 0 评论 -
2018.10.23【校内模拟】行星通道计划(二维树状数组)(树套树)
传送门解析:我们发现,每一条线段会把原来的环状分成两段,两条线段有交点当且仅当一条线段的起终点分别在另一条线段把环形分成的两个部分中。所以直接断环成链,每次新加线段&lt;u,v&gt;&lt;u,v&gt;<u,v>就等同于询问起点在1,u1,u1,u之间且终点在u,vu,vu,v之间的线段数,加上起点在u,vu,vu,v之间,终点在v,nv,...原创 2018-10-23 18:16:47 · 196 阅读 · 0 评论 -
2018.10.29【BZOJ4979】[Lydsy1708月赛]凌晨三点的宿舍(分治)(树状数组)
传送门讲个故事:这是一个悲伤的故事。我一个人,由于做过一道弱化版的题目,看出了正解,从昨天半夜11:30开始肝这道题,一顿乱搞之后过了样例,然后一直RERERE,期间重构了一次。这个故事告诉我们注意负数下标是多么的重要。然后今天早上重构了三次,一直WA。。。最后学习了DZYODZYODZYO的写法,结果一发就AAA了????这个故事告诉我们,选择一个编程复杂度不高的写法是多么的重要...原创 2018-10-29 15:20:37 · 256 阅读 · 0 评论 -
2018.11.06【LOJ147】DFS序4(DFS序)(树状数组)
传送门解析:其实用DFSDFSDFS序可以将很多树剖能做的东西的复杂度优化一个log\loglog,不过需要一点小小的转化,因为DFSDFSDFS序只能处理子树问题。显然这道题直接用树剖做是O(nlog2n)O(n\log^2n)O(nlog2n)的,但是用纯粹的DFSDFSDFS序+树状数组可以做到O(nlogn)O(n\log n)O(nlogn)。思路;对于不同修改对每个询...原创 2018-11-06 18:14:21 · 1019 阅读 · 0 评论 -
2018.11.07【CQOI2011】【BZOJ3295】【洛谷P3157】动态逆序对(树状数组套动态开点线段树)
BZOJ传送门洛谷传送门解析:首先我们可以通过一个线段树求出逆序对个数,然后就是乱搞的时间了。显然每次删除一个数,需要我们查询前面比他大的数的个数和后面比他小的数的个数,这个就是裸的树套树了。这道题可以用树状数组套线段树动态开点。代码:#include<bits/stdc++.h>using namespace std;#define ll long long#d...原创 2018-11-07 21:13:28 · 147 阅读 · 0 评论 -
2018.11.05【校内模拟】相交(DFS序)(树状数组)(用来对拍的树链剖分)
传送门解析:首先怎么判断树上两个路径相交,其中一条路径的LCALCALCA必然在另外一条路径上。所以问题变成了,新增一条路径,询问有多少其他路径的LCALCALCA在它上面,询问它的LCALCALCA在多少其他路径上面。注意处理LCALCALCA重合的情况。这个显然的做法就是维护两个线段树,然后树链剖分维护路径加,单点求值和单点加,路径求值,注意“和”字分开的两个部分不能混为一谈。但是...原创 2018-11-05 15:54:33 · 180 阅读 · 0 评论 -
2019.01.20【SDOI2014】【BZOJ3529】【洛谷P3312】数表(莫比乌斯反演)(树状数组)
BZOJ传送门洛谷传送门解析:首先一个很久没有的数论函数符号σ(n)=∑d∣nd\sigma(n)=\sum_{d\mid n}dσ(n)=∑d∣nd就是nnn的所有约数之和。那么我们要求的这个式子就是代码:#include&amp;amp;lt;bits/stdc++.h&amp;amp;gt;using namespace std;#define ll long long#define re reg...原创 2019-01-21 13:19:24 · 181 阅读 · 0 评论 -
2019.01.28【51nod1376】最长递增子序列的数量(树状数组)(DP)
传送门解析:首先我们还是从最基础的O(n2)O(n^2)O(n2)的DP讲起O(n2)O(n^2)O(n2)显然我们只需要处理出前iii个位置中,以每个位置结尾的最长上升子序列长度以及以这个位置结尾的最长上升子序列的个数,然后就可以做到O(n)O(n)O(n)枚举所有iii之前的位置进行状态更新就行了。然而我们发现能够对当前状态进行更新的状态jjj只有a[j]a[j]a[j]比当前的a...原创 2019-01-28 21:00:38 · 290 阅读 · 0 评论 -
2019.02.26【九省联考2018】【BZOJ5249】【洛谷P4364】IIIDX(贪心)(树状数组)
BZOJ传送门洛谷传送门解析:首先我们有一个很显然的 错误 的贪心,按照字典序和siz依次将最大的sizsizsiz个权值分配给以某个点为根的子树,然后根节点选择最小的权值后递归处理。很遗憾,它只能处理所有ddd不同的情况。比如这组数据:4 3.01 1 2 2答案应该是:1 2 2 1然而贪心是:1 1 2 2考虑为什么会出现这种情况,这时候,贪心的结果出来111...原创 2019-02-26 16:42:09 · 202 阅读 · 0 评论 -
【51nod1576】Tree and Permutation(树的重心)(DFS序)(树状数组)
传送门解析:有一点想法,考虑每条边被经过的次数,假设这条边将树给分为两个大小为x,yx,yx,y的联通块,则这条边的最大贡献为min(x,y)∗2\min(x,y)*2min(x,y)∗2,显然我们考虑给每个点尽量选择在另一边的点就行了。那么能不能让每条边的贡献达到可能的最大值呢?是可以的。发现我们算的min(x,y)\min(x,y)min(x,y)实际上就是以重心为根的时候,改变...原创 2019-04-04 10:25:23 · 254 阅读 · 0 评论 -
【洛谷P3792】由乃与大母神原型和偶像崇拜(随机化)(树状数组)
传送门解析:数组开小TLE了若干次 (在线丢人)其实想法还是很简单的,考虑离散化,为了保证离散化前不连续的值离散化后也不连续,我们将每个每个值+1放进数组中。给每个值赋上一个随机值,然后树状数组维护前缀和,前缀异或和。每个修改直接在树状数组里面修改。询问先查询区间和,求出值域连续情况下的左右端点,然后看一下区间异或和和原值域上异或和是否相等。代码(不要问我为什么unsigned ...原创 2019-04-05 09:40:30 · 129 阅读 · 0 评论 -
2018.09.15【codevs2492】上帝造题的七分钟2(并查集)(树状数组)(线段树)
传送门解析:这里的并查集并不能用集合合并的思想来考虑,这里并查集有点像图论中的DAGDAGDAG里的边,记录的是当前节点的下一个(包括当前)非1节点的位置。显然,对1开方对答案是没有任何影响的。那么我们就只对非1的开方。那么我们就只遍历非1的节点。修改和查询用树状数组就好了。一个数最多被开方log log arrilog log...原创 2018-09-15 14:36:57 · 250 阅读 · 0 评论