
树状数组
_beginend
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【hdu 5126 stars(四维偏序)】【cdq套cdq+树状数组】
题意在三维空间内,支持单点加111和矩形求和。q≤5∗104q\le 5*10^4q≤5∗104分析把一个询问拆成八个,就转化为了四维偏序问题。可以用cdq+树套树或者kd树来做,也可以cdq套cdq,复杂度同样是O(nlog3n)O(n\log^3 n)O(nlog3n).cdq套cdq就是先对第一维排序。处理时先递归左右两边,现在要处理左边对右边的询问,可以看成通过递归把第一维变为...原创 2020-02-17 21:36:23 · 333 阅读 · 0 评论 -
bzoj 1935: [Shoi2007]Tree 园丁的烦恼 离线+树状数组
题意给定平面上的n个点(xi,yi),每次询问一个矩形内有多少个点。 n,m<=500000分析把一个询问拆成四个矩形,然后按x坐标排序后用树状数组维护即可。代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;const i原创 2017-11-07 07:59:34 · 515 阅读 · 0 评论 -
bzoj 3155: Preprefix sum 树状数组
题意 1<=N,M<=100000,且在任意时刻0<=Ai<=100000分析唉果然像我这种弱鸡就只能切切这种大家都会的sb题了。 把答案的式子展开后用树状数组维护一下对应项就好了。代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespac原创 2017-10-19 21:40:34 · 299 阅读 · 0 评论 -
bzoj 2762: [JLOI2011]不等式组 树状数组
题意旺汪与旺喵最近在做一些不等式的练习。这些不等式都是形如ax+b>c 的一元不等式。当然,解这些不等式对旺汪来说太简单了,所以旺喵想挑战旺汪。旺喵给出一组一元不等式,并给出一个数值 。旺汪需要回答的是x=k 时成立的不等式的数量。聪明的旺汪每次都很快就给出了答案。你的任务是快速的验证旺汪的答案是不是正确的。 N<=100000,a,b,c的范围为[-10^8,10^8],k的范围为[-10^6,原创 2017-10-19 10:16:04 · 529 阅读 · 0 评论 -
bzoj 4240: 有趣的家庭菜园 树状数组+贪心
题意对家庭菜园有兴趣的JOI君每年在自家的田地中种植一种叫做IOI草的植物。JOI君的田地沿东西方向被划分为N个区域,由西到东标号为1~N。IOI草一共有N株,每个区域种植着一株。在第i个区域种植的IOI草,在春天的时候高度会生长至hi,此后便不再生长。 为了观察春天的样子而出行的JOI君注意到了IOI草的配置与预定的不太一样。IOI草是一种非常依靠阳光的植物,如果某个区域的IOI草的东侧和西侧都原创 2017-10-09 21:18:42 · 330 阅读 · 0 评论 -
bzoj 4361: isn 树状数组+动态规划
题意给出一个长度为n的序列A(A1,A2…AN)。如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止。求有多少种不同的操作方案,答案模10^9+7。 n<=2000分析一眼看过去一点思路都没有,再多看几眼,还是没有思路。。。果然还是我太菜了首先我们可以通过树状数组优化dp算出g[i]表示长度为i的不下降序列数量。 对于长度为i的不下降序列,单看其贡献的话就是g[i]∗(n−原创 2017-10-07 21:25:51 · 433 阅读 · 0 评论 -
bzoj 1264: [AHOI2006]基因匹配Match 树状数组
题意给出两个长度为5*n的序列,每个序列中[1,n]每个元素恰好出现5次。问其最长公共子序列。 n<=20000分析枚举第一个序列,设f[i]表示到当前时刻,第二个序列中最后一位为第i位的最长公共子序列的长度是多少。然后用树状数组来加速转移即可。代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#in原创 2017-08-31 21:33:48 · 365 阅读 · 0 评论 -
bzoj 3333: 排队计划 树状数组+线段树
题意给出一个长度为n的序列A,有m次操作,每次操作会选择一个位置x,然后把该位置后面(包括该位置)所有不大于A[x]的数拿出来重新排列后再放回去。要求在每次操作后输出逆序对数。 n,m<=500000分析我们定义一个位置x的贡献为x后面有多少个比A[x]小的数。那么逆序对数就是每个位置贡献的和。 注意到每次操作会吧位置x后面所有不大于x的位置的贡献变为0,那么只要用一棵线段树来维护即可。代码#i原创 2017-09-03 21:18:15 · 309 阅读 · 0 评论 -
51nod 1213 二维曼哈顿距离最小生成树 树状数组
题意二维平面上有N个坐标为整数的点,点x1 y1同点x2 y2之间的距离为:横纵坐标的差的绝对值之和,即:Abs(x1 - x2) + Abs(y1 - y2)(也称曼哈顿距离)。求这N个点所组成的完全图的最小生成树的边权之和。 n<=50000,0<=xi,yi<=1000000分析有个小结论就是以一个点为原点建立直角坐标系,在每45度内只会向距离该点最近的一个点连边。 证明比较繁琐,可以点这原创 2017-08-18 15:16:08 · 811 阅读 · 0 评论 -
bzoj 4756: [Usaco2017 Jan]Promotion Counting dsu on tree+树状数组
题意n只奶牛构成了一个树形的公司,每个奶牛有一个能力值pi,1号奶牛为树根。 问对于每个奶牛来说,它的子树中有几个能力值比它大的。 n<=100000分析直接上就好了。。。代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std原创 2017-07-16 11:00:30 · 341 阅读 · 0 评论 -
bzoj 3192: [JLOI2013]删除物品 树状数组
题意箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆。 (2)所有物品都是一样的,但是它们有不同的优先级。 (3)你只能够移动某堆中位于顶端的物品。 (4)你可以把任意一堆中位于顶端的物品移动到其它某堆的顶端。若此物品是当前所有物品中优先级最高的,可以直接将之删除而不用移动。 (5)求出将所有物品删除所需的最小步数。删除操作不计入步数之中。 (6)只是一个比较难原创 2017-11-08 07:43:06 · 356 阅读 · 0 评论 -
51nod 1592 数列积 莫队算法+树状数组
题意小明有一个含有n个数的数列 a1,a2,…,an 。 他定义一个数列的积为∑ni=1∑nj=i|ai−aj∗(j−i)\sum_{i=1}^n\sum_{j=i}^n|a_i-a_j*(j-i) 他发现算出数列积实际上非常简单。因此他现在有了一个绝妙的主意。 他有Q个询问。 对于每个询问会给定两个参数 l,r 。 他想知道的是,将 al,al+1,…,ar 拿出来成为一个数列,问该数列原创 2017-10-29 21:04:17 · 480 阅读 · 0 评论 -
bzoj 3881: [Coci2015]Divljak AC自动机+树链的并+树状数组
题意Alice有n个字符串S_1,S_2…S_n,Bob有一个字符串集合T,一开始集合是空的。 接下来会发生q个操作,操作有两种形式: “1 P”,Bob往自己的集合里添加了一个字符串P。 “2 x”,Alice询问Bob,集合T中有多少个字符串包含串S_x。(我们称串A包含串B,当且仅当B是A的子串) Bob遇到了困难,需要你的帮助。 1 <= n,q <= 100000; Alice原创 2017-11-08 21:00:22 · 436 阅读 · 0 评论 -
Codechef CHEFFIB 点分树套树状数组
题意有一棵n个节点的树,初始每个节点的权值均为0。要求资瓷q个操作: 1 u m a b表示对于任意一个节点v,若dis(u,v)≤mdis(u,v)≤mdis(u,v)\le m,则节点v的权值加上以a和b为开头的斐波那契数列的第dis(u,v)dis(u,v)dis(u,v)项。 2 u询问节点u的权值 n,q≤300000n,q≤300000n,q\le300000分析考虑...原创 2018-05-30 17:14:04 · 412 阅读 · 0 评论 -
Codeforces 983E NN country 倍增+树状数组
题意给一棵n个节点的树和m条链,有q次询问,每次询问给出两个点x和y,问最少选出多少条链使得x到y路径上的每条边都至少被覆盖一次。 n,m,q≤2∗105n,m,q≤2∗105n,m,q\le2*10^5分析考虑先预处理每个点往上跳一步最多可以跳到哪里,然后先贪心从两个端点往lca跳,求出跳到某个离lca最近且不为lca的点,设为a和b。 接下来分两种情况,若a可以一步到达b,...原创 2018-05-24 21:53:20 · 691 阅读 · 0 评论 -
LibreOJ #6041.「雅礼集训 2017 Day7」事情的相似度 后缀自动机+set启发式合并+扫面线+树状数组
题意给一个长度为n的01串,每次询问给出一个区间[l,r],问所有结束位置在[l,r]中的前缀,两两lcs的最大值是多少。 n,m≤105n,m≤105n,m\le10^5分析显然一个前缀对(x,y)能贡献到所有满足l≤x,y≤rl≤x,y≤rl\le x,y\le r的询问[l,r][l,r][l,r]。 两个前缀的lcs等价于其在sam的parents树上lca的mx。那么...原创 2018-05-08 14:40:48 · 587 阅读 · 0 评论 -
bzoj 1129: [POI2008]Per 中国剩余定理+树状数组
题意给你一个序列s,你把这个序列的所有不同排列按字典序排列后,求s的排名mod m n<300000,2<=m<=109,1<=Si<=300000n<300000,2<=m<=109,1<=Si<=300000n∏pki∏pik\prod p_i^k的形式,然后把每个pkipikp_i^k当做模数做一次,最后用CRT合并就好了。 ...原创 2018-04-03 20:27:58 · 537 阅读 · 0 评论 -
bzoj 4017: 小Q的无敌异或 树状数组
题意给出一个长度为n的序列AAA,要求回答两个问题: 设f(i,j)=AixorAi+1...xorAjf(i,j)=AixorAi+1...xorAjf(i,j)=A_ixorA_{i+1}...xorA_j,求所有f(i,j)f(i,j)f(i,j)的和。 设g(i,j)=Ai+Ai+1...+Ajg(i,j)=Ai+Ai+1...+Ajg(i,j)=A_i+A_{i+1}...+A_...原创 2018-03-19 19:45:58 · 310 阅读 · 0 评论 -
bzoj 3488: [ONTAK2010]Highways 树状数组
题意给一棵n个点的树以及m条额外的双向边 q次询问,统计满足以下条件的u到v的路径: 恰经过一条额外的边 不经过树上u到v的路径上的边 n,m<=100000,q<=500000分析一道无聊题居然调了我一个晚上,还卡常简直丧心病狂。 注意这题只走树边也算一种方案,所以只要把答案+1就好了。 把dfs序搞出来后就变成了每次询问一个矩形中的点数,只要离线树状数组...原创 2018-03-17 08:36:37 · 359 阅读 · 0 评论 -
AtCoder Regular Contest 068 E - Snuke Line 离线+树状数组
题意有m+1个车站,编号为0到m,有n种纪念品,第i种在编号在区间[li,ri]的车站中可以买到。现在有m辆车,第i辆会从车站0出发,每隔i站停靠一次,问在该车上的旅客最多可以买到多少种不同的纪念品。 n<=300000,m<=100000分析我们可以考虑求第i辆车的旅客买不到哪些纪念品。一个区间不包含整除i的点,要么区间在两个可以整除i的点之间,要么在最后一个可以整...原创 2018-02-23 09:45:38 · 435 阅读 · 0 评论 -
AtCoder Grand Contest 006 E - Rotate 3x3 树状数组
题意一开始有一个3*n的矩阵,初始时位置(i,j)上是(j-1)*3+i。现在给出一个目标状态,问能否通过每次把一个3*3的矩阵旋转180度来得到该目标状态。 n<=100000分析我们可以把问题看成能否由目标状态变成初始状态。 若某一列是正的,则系数为1,否则系数为-1。那么问题就变成了,给你一列数,每次可以选择连续的三个数然后将这三个数翻转并取反,问能否变成1,2,…...原创 2018-02-15 11:35:00 · 321 阅读 · 0 评论 -
bzoj 4545: DQS的trie 广义后缀自动机+离线+树状数组
题意DQS的自家阳台上种着一棵颗粒饱满、颜色纯正的trie。 DQS的trie非常的奇特,它初始有n0个节点,n0-1条边,每条边上有一个字符。并且,它拥有极强的生长力:某个i时刻,某个节点就会新生长出一颗子树,它拥有si个节点且节点之间的边上有一个字符,并且新生长出来的子树也是一个树结构。然而因为是新长出来的,根据生活常识可知si必定不会大于i时刻之前的树的大小。 DQS定义trie的子原创 2018-01-10 21:44:13 · 606 阅读 · 0 评论 -
bzoj 4548: 小奇的糖果 双向链表+树状数组
题意有 N 个彩色糖果在平面上。小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果。求出最多能够拾起多少糖果,使得获得的糖果并不包含所有的颜色。 N ≤ 100000,K ≤ 100000,T ≤ 3分析只考虑在线段下方的情况。 首先很显然的思路就是枚举哪一种颜色不选。那么现在有两种情况:一种是一个点和在它下方的前驱和后继围成的矩形;一种是两个相邻点之间的那一部分矩形。 那么我们可以原创 2017-07-14 16:24:15 · 324 阅读 · 0 评论 -
bzoj 2434: [Noi2011]阿狸的打字机 AC自动机+树状数组
题意给你一棵trie,每次询问一个串在另一个串中出现了多少次。 n,q<=100000分析好气啊骑士队居然输掉了!!!不过老詹还是很给力的啊。气得我都不想写题了。首先很显然这是一棵trie。 考虑朴素的做法,可以每次把两个串进行匹配,复杂度是O(qn^2)。考虑用AC自动机的fail指针来优化,可以做到O(nq),但仍然会超时。 显然一个串s1在另一个串s2中出现的次数就等于根到s2的结尾中有原创 2017-06-05 13:20:09 · 430 阅读 · 0 评论 -
bzoj 3790: 神奇项链 manachar+dp+树状数组
题意母亲节就要到了,小 H 准备送给她一个特殊的项链。这个项链可以看作一个用小写字 母组成的字符串,每个小写字母表示一种颜色。为了制作这个项链,小 H 购买了两个机器。第一个机器可以生成所有形式的回文串,第二个机器可以把两个回文串连接起来,而且第二个机器还有一个特殊的性质:假如一个字符串的后缀和一个字符串的前缀是完全相同的,那么可以将这个重复部分重叠。例如:aba和aca连接起来,可以生成串aba原创 2017-05-31 19:50:04 · 436 阅读 · 0 评论 -
bzoj 2683: 简单题 cdq分治+树状数组
题意要求资瓷下列操作: 1 x y z把(x,y)加上z 2 x1 y1 x2 y2求矩形x1 y1 x2 y2的权值和 n<=500000,x,y<=n,q<=200000分析首先可以把一个询问用容斥原理拆成四个询问,然后在cdq分治中二分一个横坐标mid,然后把操作从前往后扫一遍,若是修改操作且横坐标不大于mid则处理,若是询问操作且横坐标大于mid则处理;然后把操作按照横坐标分成左右两部原创 2016-11-22 21:50:37 · 432 阅读 · 0 评论 -
bzoj 2141: 排队 树状数组套线段树
题目传送门分析树状数组套线段树。 对于每一次交换x和y的操作,先减去在交换之前x和y分别与a[x+1..y-1]产生了多少逆序对,再加上交换后x和y分别与a[x+1..y-1]产生了多少逆序对,然后再进行交换操作就好了。一开始的想法是线段树套线段树,但是很明显线段树各方面的指标都没有树状数组优秀,所以就果断改成了树状数组。貌似分块+二分或分块套树状数组或线段树套平衡树也是可做的,懒得打了。代码#i原创 2016-10-22 11:56:35 · 444 阅读 · 0 评论 -
bzoj 3295: [Cqoi2011]动态逆序对 cdq分治+树状数组
题目大意给出1-n的一个排列和m个操作,每个操作有一个数字x表示在序列中把x这个数删掉,并且求在删掉x前该序列中有多少个逆序对。 n<=100000,m<=50000分析这题看完题后就想到了可以用树套树来搞,但是比较麻烦(其实也不是很麻烦)并且对于n<=100000,m<=50000的数据范围如果用nlog^2的复杂度去做的话会跑的很慢,于是就选择了新学的cdq分治。先一开始往序列里面插入没被删除原创 2016-10-24 19:30:18 · 433 阅读 · 0 评论 -
bzoj 2738: 矩阵乘法 cdq分治+二维树状数组
题意给出一个n*n的矩阵和q个询问,每次询问一个子矩阵内第k小的数。 n<=500,q<=60000,a[i,j]<=1000000000分析毕竟cdq分治做的题太少,没有往这方面去想。 知道了要用cdq分治来做就很简单了,二分一个答案然后把小于mid的元素都扔进二维树状数组里,判断每个询问小于mid的元素个数,若小于k则扔到右边,不然扔到左边就好了。 一开始zz了,每一次都是暴力枚举整个矩阵原创 2016-11-11 21:53:03 · 444 阅读 · 0 评论 -
bzoj 3787: Gty的文艺妹子序列 分块+树状数组
题意给出n个数,要求资瓷单点修改和区间逆序对,强制在线。 n,m<=50000分析这题好劲啊!!!看到题就想起了bzoj 3744,只不过那一题没有单点修改。 bzoj 3744的做法是预处理ans[i,j]表示第i块到点j的逆序对数,sum[i,j]表示不大于i的数在前j块里面出现的次数。 但这题很明显不能这么干,因为维护ans和sum的复杂度太大。 那么我们考虑转换一下,设ans[i,j原创 2016-11-07 06:51:59 · 550 阅读 · 0 评论 -
bzoj 3744: Gty的妹子序列 分块+树状数组
题意给出n个数,要求资瓷求区间逆序对,并要求强制在线。 n,m<=50000分析先把所有数离散化,这样就可以方便用树状数组啦。 然后分一波块。 然后我们在O(nn√log)O(n\sqrt nlog)的时间内预处理出两个数组: ans[i,j]表示第i块到第j个数之间有多少个逆序对。 sum[i,j]表示前j块里面有多少个数不大于i。 那么设现在要询问的区间为[l,r] 假如l和r在同原创 2016-11-05 21:22:52 · 417 阅读 · 0 评论 -
bzoj 3262: 陌上花开 cdq分治
题目Description有n朵花,每朵花有三个属性:花形(s)、颜色(c)、气味(m),又三个整数表示。现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量。定义一朵花A比另一朵花B要美丽,当且仅当Sa>=Sb,Ca>=Cb,Ma>=Mb。显然,两朵花可能有同样的属性。需要统计出评出每个等级的花的数量。 Input第一行为N,K (1 <= N <= 100,000, 1 <= K <=原创 2016-10-23 21:45:09 · 495 阅读 · 0 评论 -
bzoj 1901: Zju2112 Dynamic Rankings 树状数组套线段树 cdq分治
题目传送门树套树一棵树状数组,每个节点上都是一棵权值线段树(不是可持久化线段树),线段树动态开节点。 然后每次查询的时候二分答案就好了。 时间复杂度O(nlog^3) 勉强水过……#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace原创 2016-10-23 20:16:33 · 537 阅读 · 0 评论 -
bzoj 3211: 花神游历各国 树状数组+并查集
题意给出n个数,要求资瓷下列操作: 1 l r表示查询l到r的和 2 l r表示把每个a[x] (l<=x<=r)变为sqrt(x) n<=100000,m<=200000分析显然开根号是不能区间维护的,但发现一个int最多开五次根号就会变为1,所以我们可以用并查集来维护每个数的下一个可以开根号的数是哪一个,那么就可以均摊O(1)来暴力修改了。 区间操作用树状数组搞定即可。第一次写并查集维护原创 2016-11-24 21:52:48 · 682 阅读 · 0 评论 -
bzoj 3529: [Sdoi2014]数表 莫比乌斯反演+树状数组
题意有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和。给定a,计算数表中不大于a的数之和。 1 < =N.m < =10^5 , 1 < =Q < =2×10^4分析多做了几道反演题终于找到了一点所谓的套路了,也就是把式子化简之后求前缀和然后用分块处理。直接上PoPoQQQ大佬%%%的题解代码#include<iostr原创 2017-01-16 11:10:24 · 423 阅读 · 0 评论 -
bzoj 4881: [Lydsy2017年5月月赛]线段游戏 树状数组+set
题意给出一个n的排列,求将该排列划分成两部分,使得其分别为上升序列的方案有多少种。答案模998244353. n<=100000分析一开始yy出了一个dp方程,看形式应该是可以用数据结构来优化的。 实际上有更简单的方法。 首先把无解的情况判掉。若最长下降子序列大于2的无解。 我们可以在两两逆序对之间连边,那么答案就是2^联通块数量。 对于每个连通块,我们将其最大的元素仍到set里面。每加入原创 2017-05-19 11:46:45 · 429 阅读 · 0 评论 -
bzoj 2819: Nim 树状数组+dfs序
题意给一棵树,要求资辞两个操作: Q x y询问x到y路径上的异或和是否为0. C x y将x的权值改为y n,q<=500000分析这题一眼过去的想法就是树剖嘛,结果log2发现会爆炸。。。 其实我们只要维护每个点到根的路径异或和就好了。 那么考虑每修改一个点会影响到哪些点,显然就是它子树内的点啦! 那么我们只要用dfs序或树剖序,然后每次修改的时候用树状数组差分一下就好啦。 我打的原创 2017-05-18 21:50:36 · 288 阅读 · 0 评论 -
bzoj 3594: [Scoi2014]方伯伯的玉米田 二维树状数组优化dp
题意方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美。 这排玉米一共有N株,它们的高度参差不齐。 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列。 方伯伯可以选择一个区间,把这个区间的玉米全部拔高1单位高度,他可以进行最多K次这样的操作。拔玉米则可以随意选择一个集合的玉米拔掉。 问能最多剩多少株玉米,原创 2017-05-18 17:19:34 · 366 阅读 · 0 评论 -
bzoj 2789: [Poi2012]Letters 树状数组求逆序对
题意给出两个长度相同且由大写英文字母组成的字符串A、B,保证A和B中每种字母出现的次数相同。 现在每次可以交换A中相邻两个字符,求最少需要交换多少次可以使得A变成B。 n<=1000000分析贪心的想,显然每个字符会移到离它最近的相同的字符处那么我们只要把对应的位置序列求出来,然后用树状数组求个逆序对就好了。代码#include<iostream>#include<cstdio>#inclu原创 2017-05-16 09:43:03 · 335 阅读 · 0 评论 -
bzoj 2743: [HEOI2012]采花 树状数组
题意有一个长度为n的序列,每次询问[l,r]中有多少种颜色出现了两次以上。 n,q<=1000000分析一眼莫队的说。。。但看到数据范围就怂了。 假设现在询问的区间是[l,r],那么我们可以把第二次出现的数的权值看做1,其余看做0,就可以把问题变成求区间和了。那么只要把询问离线一下,然后从后往前做,用一棵树状数组来资辞单点修改区间查询即可。代码#include<iostream>#includ原创 2017-05-06 18:18:13 · 291 阅读 · 0 评论