
树状数组
文章平均质量分 71
Frozen_Guardian
已退役菜鸡Acmer
展开
-
洛谷 - P2163 [SHOI2007]园丁的烦恼(不带修二维数点-树状数组/主席树)
题目链接:点击查看题目大意:二维平面坐标系中给出 nnn 个坐标点,然后是 mmm 次询问,每次询问需要回答一个闭合矩阵中有多少个点题目分析:想挂树套树来着,但是复杂度有点大。本题不带修且可以离线,考虑将一个询问拆成四个二维前缀和的表示形式,然后就可以排个序直接用树状数组统计啦有个小细节就是当 xxx 坐标相同时,需要先加点然后再询问代码:// Problem: P2163 [SHOI2007]园丁的烦恼// Contest: Luogu// URL: https://www.luogu.co原创 2021-08-23 14:17:35 · 445 阅读 · 2 评论 -
HDU多校1 - 6959 zoto(莫队+树状数组/值域分块)
题目链接:点击查看题目大意:在二维平面内有 nnn 个点,表示为 (i,f[i])(i,f[i])(i,f[i]),需要回答 mmm 次询问,每次询问会给出一个矩形,问矩形内有多少个不同的 yyy 值题目分析:对于 xxx 轴而言可以视为区间询问,每次询问的是“颜色”个数,因为可以离线,所以不难想到对 xxx 轴套上莫队。莫队需要支持增加、删除和询问操作,对应到 yyy 轴上也就是单点修改、区间查询,不难想到对 yyy 轴套上树状数组。因为数据较水,所以到此就产生出了一种可以AC的做法,就是莫队套树状数原创 2021-07-28 21:13:15 · 302 阅读 · 0 评论 -
CodeForces - 1553F Pairwise Modulo(数论+树状数组)
题目链接:点击查看题目大意:给出一个长度为 nnn 的序列,求 pk=∑1≤i,j≤kai mod ajp_k = \sum_{1 \le i, j \le k} a_i \bmod a_jpk=∑1≤i,j≤kaimodaj题目分析:直接求解比较困难,需要对模型进行两步转换:首先取模运算,等价于 x−x∗⌊yx⌋x-x*\lfloor \frac{y}{x} \rfloorx−x∗⌊xy⌋其次给原式子中的 i,ji,ji,j 规定一个先后顺序,记 sk=∑1≤i,j≤k,i>jai原创 2021-07-23 10:21:25 · 600 阅读 · 0 评论 -
AcWing - 246. 区间最大公约数(树状数组+线段树)
题目链接:点击查看题目大意:给出一个长度为 nnn 的序列,需要执行 mmm 次操作,每次操作分为下列两种类型:C l r d:将区间 [l,r][l,r][l,r] 位置的数字都加上 dddQ l r:询问区间 [l,r][l,r][l,r] 的最大公约数题目分析:首先是推广一下最大公约数的公式:gcd(a,b)=gcd(a,b−a)gcd(a,b)=gcd(a,b−a)gcd(a,b)=gcd(a,b−a)gcd(a,b,c)=gcd(a,b−a,c−b)gcd(a,b,c)=gcd(原创 2021-07-12 20:00:55 · 189 阅读 · 0 评论 -
HDU - 6183 Color it(动态开点线段树/树状数组套动态开点线段树)
题目链接:点击查看题目大意:给出一个二维平面坐标系,需要完成四种操作:0:删除所有点1原创 2021-05-06 11:34:20 · 256 阅读 · 9 评论 -
CodeForces - 987E Petr and Permutations(树状数组+逆序对定理)
题目链接:点击查看题目大意:给出一个长度为 n 的序列,可能打乱过 3 * n 次,也可能打乱过 7 * n + 1 次,问到底打乱过多少次题目分析:首先看出,3 * n 和 7 * n + 1 的奇偶是不同的,如此根据逆序对定理,可以根据逆序对的奇偶来判断对换次数,直接用树状数组求出逆序对的个数就好了代码://#pragma GCC optimize(2)//#pragma GCC optimize("Ofast","inline","-ffast-math")//#pragma.原创 2020-12-05 11:03:20 · 2293 阅读 · 6 评论 -
牛客 - tokitsukaze and Inverse Number(树状数组+逆序对定理)
题目链接:点击查看题目大意:给出一个长度为 n 的排列 a,需要执行 q 次操作,每次操作会将区间 [ l , r ] 内的数循环右移 k 次,现在需要回答每次操作后排列的逆序对数,只需要回答奇偶即可题目分析:首先需要知道逆序对定理,也就是对于一个排列来说,交换任意一对数都会改变逆序对的奇偶,证明如下:又因为将区间 [ l , r ] 内的数字循环右移一次用 r - l 次对换一定是可以完成的,所以记录一下每次操作共需要多少次对换次数,就可以快速更新逆序对的奇偶关系了当然最初始的逆序对用原创 2020-12-05 10:56:12 · 2214 阅读 · 4 评论 -
HDU - 5658 CA Loves Palindromic(回文自动机/哈希+树状数组)
题目链接:点击查看题目大意:给出一个字符串 s ,接下来给出 m 个查询,每次查询的形式会给出一个 l 和 r ,问区间 [ l , r ] 内有多少个回文子串题目分析:因为查询的次数比较多,所以我们可以预处理出答案然后O(1)回答,因为回文自动机的时间复杂度为O(n)级别的,我们可以枚举 n * n 个子串依次记录答案代码:#include<iostream>#i...原创 2020-01-30 21:57:07 · 285 阅读 · 0 评论 -
2020ICPC(小米邀请赛2) - Data Structure Problem(线段树+树状数组)
题目链接:点击查看题目大意:给出一个长度为 n 的数列 a 和数列 b,然后需要维护一个前缀和 c,c 的定义如下:c[ i ] = max( c[ i - 1 ] + b[ i ] , a[ i ] )现在需要执行 m 次操作,每次操作分为下列三种类型:1 x y:令 a[ x ] = y 2 x y:令 b[ x ] = y 3 x:输出 c[ x ]题目分析:自己手玩一下不难发现,c[ x ] 的取值范围无非就是下列的情况中取最大值:b[ 1] + b[ 2 ] + ... +.原创 2020-11-03 18:10:49 · 251 阅读 · 0 评论 -
牛客 - What Goes Up Must Come Down(树状数组求逆序对)
题目链接:点击查看题目大意:给出一个长度为 n 的序列,每次操作可以交换相邻两个数字的位置,现在问最小进行多少次操作,可以使得序列的相对大小呈山峰状(中间高两边低,或非严格递增或非严格递减)题目分析:简单分析过后不难看出,对于位置 i 的数字来说,最后的位置只会有两种情况,一种是位于上升的山坡上,另一种是位于下降的山坡上,分类讨论一下:如果位置 i 最终位于上升的山坡上,那么至少需要与其左边所有大于他的数完成一次交换 如果位置 i 最终位于下降的山坡上,那么至少需要与其右边所有大于他的数完成一原创 2020-10-06 20:24:24 · 346 阅读 · 0 评论 -
ZOJ - 4117 BaoBao Loves Reading(树状数组求区间内不同数的个数+思维)
题目链接:点击查看题目大意:给出一个长度为 n 的序列,其意义为第 i 秒需要看第 a[ i ] 种书,书架上可以供应无限种书,但是书桌有容量,当书桌上的容量达到上限后,如果还想从书架上拿新书来看,就必须要从书桌上拿最早不看的那本书还回去才行,每次拿书都会记为一个操作,问当书桌的容量分别为 1 ~ n 时,看完 n 次书的最小操作次数题目分析:首先这个题目限制了每次换书只能舍弃最早不看的那本书,所以并不是一种最优性的决策,这也大大降低了题目的难度单独考虑两个相同的书的位置分别为 l 和 r,计算原创 2020-09-17 18:03:44 · 296 阅读 · 0 评论 -
HDU - 5517 Triple(三维偏序-二维树状数组/CDQ分治)
题目链接:点击查看题目大意:给出 n 个二元对 ( a , b ) 和 m 个三元对 ( c , d , e ),对于所有 b == e 的二元对和三元对,可以通过某种运算形成一个新的三元对 ( a , c , d ) ,现在问所有的 ( a , c , d ) 中,有多少个三元对满足,不存在另一个三元对 ( a1 , c1 , d1 ) 满足 a1 >= a && c1 >= c && d1 >= d题目分析:首先需要分析出来,对于所有的二元对 (原创 2020-09-15 16:09:33 · 319 阅读 · 0 评论 -
洛谷 - P3810 【模板】三维偏序(陌上花开)(CDQ分治套树状数组)
题目链接:点击查看题目大意:给出 n 个点,每个点有三个属性 a , b , c ,对于每个点 i 来说,求出有多少个 j 满足 a[ j ] <= a[ i ] && b[ j ] <= b[ i ] && c[ j ] <= c[ i ]题目分析:三维偏序的模板问题,咕咕咕了有一年的CDQ分治,今天终于补出来了,简单总结一下,一维偏序排个序就出来了,二维偏序是对一维排序,另一维用线段树或树状数组维护,三维的话,第一维排序,第二维用归并排序维护,第原创 2020-08-28 20:53:44 · 284 阅读 · 0 评论 -
牛客多校1 - Infinite Tree(虚树+换根dp+树状数组)
题目链接:点击查看题目大意:给出一个无穷个节点的树,对于每个大于 1 的点 i 来说,可以向点 i / minvid[ i ] 连边,这里的 mindiv[ x ] 表示的是 x 的最小质因数,现在给定 m 个点分别是 1! , 2! , 3! ... ,每个点都有个权值 w[ i ] ,现在需要找出一个点 u ,使得最小,输出这个最小值题目分析:先说收获,通过这个题让我稍微明白了一点换根dp。。话说为什么不直接去刷换根dp的题目,感觉有点多此亿举再说简单的部分,如果 m 个节点的树已经求出来了原创 2020-08-27 20:19:06 · 679 阅读 · 0 评论 -
HDU多校1 - 6756 Finding a MEX(分块+二分+树状数组)
题目链接:点击查看题目大意:给出一个 n 个点和 m 条边的无向图,每个点都有一个权值,现在需要执行q 次操作,每次操作分为两种类型:1 pos val :将第 pos 个点的权值修改为 val 2 pos :询问第 pos 个点相邻的所有点的权值组成的集合的 mex题目分析:只能说数据水了,如果数据拉满 std 的复杂度应该是会 TLE 的很显然的几个结论是:设点 u 的度数为 du[ u ] ,则 mex( u ) 的答案一定小于等于 du[ u ] 度数大于等于 sqrt( n.原创 2020-07-23 02:02:13 · 463 阅读 · 0 评论 -
HDU - 5788 Level Up(主席树+dfs序+树状数组)
题目链接:点击查看题目大意:给出一棵有向树,每个节点都有一个初始的权值 a[ i ] ,和一个通过计算得到的权值 mid[ i ] ,mid 数组的计算方法如下:mid[ u ] 为结点 u 及其子树中所有a[ i ] 的中位数,现在问如果可以令其中一个节点的 a[ i ] 变为 1e5,如何选择可以使得所有节点的 mid[ i ] 之和最大题目分析:乍一看题目可能比较复杂,但是一步一步分析下来可能就能找到突破口了首先是子树,对于子树上进行操作,我们可以跑出整棵树的dfs序,这样就将子树上的操.原创 2020-06-19 01:55:48 · 333 阅读 · 0 评论 -
CodeForces - 1288E Messenger Simulator(树状数组)
题目链接:点击查看题目大意:给出n和m,表示n个人和m个操作,每次操作会将一个数x放到首位置上来,其他数往后顺延,比如:初始时的数组为[4,1,5,3,2],当第一个x为 3 ,则序列变为[3,4,1,5,2],第二个x为 4,序列变为[4,1,5,3,2],第三个x为 2,序列变为[2,4,1,5,3],现在要求输出每个数字最左边的位置和最右边的位置,初始时每个数字在数字所表示的位置上,...原创 2020-01-15 17:26:22 · 684 阅读 · 2 评论 -
HDU - 5877 Weak Pair(离散化+树状数组+dfs序)
题目链接:点击查看题目大意:给定一个n个节点的树,每个节点都有权值,现在定义weak pair(u,v)需要满足的两个条件:u是v的祖先; ;问给定的树中有多少个weak pair;题目分析:我们可以将问题转化一下,要求,可以两边同除,得到,即用dfs序从根节点跑一边树,记录截止到任意子节点为止,之前有多少个小于等于的父节点即可,用树状数组或线段树维护数量就行,这里偷个懒用树状数组...原创 2019-08-18 20:04:24 · 267 阅读 · 0 评论 -
POJ - 2352 Stars(线段树/树状数组)
题目链接:点击查看题目大意:给出n个星星的坐标,规定每个星星的等级为在它左下方的星星的个数,输出0~n-1每个等级共有多少个星星题目分析:裸的线段树,因为x坐标和y坐标都已经给排好序了,是按照y升序,当y相等时按照x升序排序,那么当输入到任意一个星星的时候,我们看图易知,之前录入过的坐标中x小于等于当前坐标的都在当前坐标的左下角,所以我们可以按x坐标进行统计,有一个地方需要注意的就是,因为...原创 2019-08-14 13:38:01 · 249 阅读 · 0 评论 -
HDU - 1394 Minimum Inversion Number(树状数组)
题目链接:点击查看题目大意:线段树求逆序数,给出的数列可以组成环,问怎么样求可以让逆序数最小,输出最小值题目分析:看到这个题的第一反应是暴力枚举5000种情况,因为感觉这个题的N给的不是很大,但是仔细一想应该是个N*N*logN的时间复杂度,一下子到了1e8,肯定是稳稳的T了,就没去尝试,这个题目最关键的点是找到逆序数的关系,做过这么多有关逆序数的题目,都是变形题目,但是本质是不变的,我们...原创 2019-08-14 13:19:14 · 232 阅读 · 0 评论 -
HDU - 5775 Bubble Sort(树状数组)
题目链接:点击查看题目大意:给出n个数,求出按照冒泡排序期间每个数可以到达的最右边位置和最左边位置的差题目分析:其实这个题想明白了就很简单了,先用辅助数组a按照顺序存储每一个数,a[i]就代表排序完的位置,i就代表排序前的位置,按照冒泡排序的规则,可以知道,任意位置可以到达的最左边的位置,就是它排序前和排序后的位置中的最小值,而可以到达最右边的位置是取决于其右边有几个比它本身小的数,可以用...原创 2019-08-11 21:43:01 · 228 阅读 · 0 评论