
树状数组
文章平均质量分 58
Cosmic_Tree
什么时候才能像杨大佬一样强啊(´;︵;`)
展开
-
HDU - 5775 - Bubble Sort( 树状数组 + 思维 )
题目链接:点击进入题目题意问在给出的冒泡排序过程中,一个数到达的最右边位置与最左边位置距离差。思路对于一个数,位置 i ,假设右边比它小的数有 r 个,左边比它大的数有 l 个,最右边到达的位置是 i + r , 最左边到达的位置是 min ( i , i + r - l ) ;统计数右边比它小的数的个数,左边比它大的数的个数可以用树状数组解决。代码// Problem: Bubble Sort// Contest: Virtual Judge - HDU// URL: https:原创 2021-08-20 18:20:11 · 183 阅读 · 0 评论 -
HDU - 1394 - Minimum Inversion Number ( 树状数组 )
题目链接:点击进入题目题意对于 n 数组有 n 种情况:a1, a2, …, an-1, ana2, a3, …, an, a1a3, a4, …, an, a1, a2…an, a1, a2, …, an-1问这些情况中逆序对最少的是多少。思路若是理解树状数组正常情况求解逆序对的个数,那么就应该比较容易想到,我可以在正常遍历 1 - n 一遍后得到第一种的答案,然后将 a [ 1 ] 删除,再添加。( 即 - 删除之前 a [ 1 ] 的贡献 + a [ 1 ] 再次添加的贡献就是原创 2021-08-20 18:20:00 · 231 阅读 · 0 评论 -
POJ - 2352-Stars ( 树状数组 )
题目链接:点击进入题目题意定义星星的等级为它左下角的星星的数量 ( 正下或者正左也算 ),给你 n 个星星的坐标 ( 按先 y 递增,再 x 递增的顺序给 ),让你求出 0 ~ ( n - 1 ) 各个等级星星的个数思路由于给的坐标是有序的,( 先 y 递增,再 x 递增 ),因为等级是在左下角 ( <= y , <= x ) 的 星星数量,考虑 y 是有序递增给出的,这就先天满足一个条件 <=y ,也就是说,对于第 i 个星星,前 i - 1 个的 y 都是小于 y [原创 2021-08-20 18:19:19 · 263 阅读 · 0 评论 -
HDU - 7071 Guess the weight ( 思维 + 树状数组上二分 )
题面链接:点击进入题目题意略。。。。(待补)思路看题目我们大概可以知道只看抽取的前两张牌是什么就行了。因此,若此时共 sum 张牌,那么总的方案数( 也就是最终答案的分母 )就是 sum * ( sum - 1 ) 种情况。再看分子部分:( 这里定义所有牌的编号都是不同的,也就是说,编号虽然不同,但可能值相同 )( 定义获得第二张牌的概率为获胜的概率 )对于卡牌 i ,设价值 < w [ i ] 的卡牌有 a 张,价值 > w [ i ] 的卡牌有 b 张,既然求最大的获胜原创 2021-08-18 21:20:05 · 275 阅读 · 0 评论 -
P4113 [HEOI2012]采花 ( 树状数组 + 离线 )
题目链接:点击进入题目思路跟此题相似:HH的项链对于若干个询问的区间 [ l , r ] ,如果他们的 r 都相等的话,那么对于数组中出现的同一个数字,因为要求只有每个数出现至少两次才可以计入答案,那么我们只需要关心出现在最右边的第二个的即可。( r 固定情况下,只需要看 l 与这第二个的大小关系来判断这个数可不可以计入答案 )对 [ 1 , r ] 保留所有数离 r 第二近的那个,剩下的扔掉。那么此时求前缀和 sum , sum [ r ] 就是 [ 1 , r ] 的不同颜色的数量,那么原创 2021-08-18 21:19:25 · 298 阅读 · 0 评论 -
P1908 逆序对 ( 离散化 / 动态开点 )
题目链接:点击进入题目思路1(树状数组+离散化)求逆序对,这个题给的范围为 1e9 ,正常的话是将数作为下标并修改对应值,但是这里要是将数当作下标肯定不行,因为开不了 1e9 那么大的数组,因此我们对其离散化一下 ( 也就是排序,按照大小赋予编号 ),这样我们用编号进行树状数组的修改,数组最大只需要开1e6 即可。( 仔细想一下,离散化其实就是将原来中间没有赋值的那些位置除去了,留下只会被用到的位置,虽然给这些位置重新编号了,但是实际上相对位置是没变的 )离散结束就是正常的操作了,例如此题。代原创 2021-08-15 13:57:26 · 195 阅读 · 0 评论 -
P1972 [SDOI2009]HH的项链 ( 树状数组 + 离线 )
题目链接:点击进入题目思路对于这个题乍一看,虽然是区间问题,但是如果在线处理询问的话不是很好解决,区间的查询是无序的。那我们想想离线,在区间查询有序的情况下能不能做。我们想想能不能插入一个位置,然后就解决以这个位置为右边界的区间查询。假如到达位置 iii ,我们怎么解决 [l,i][l,i][l,i] 的区间查询。若是我能维护一个前缀和,通过 sum[i]−sum[l−1]sum[i]-sum[l-1]sum[i]−sum[l−1] 就能求得这个区间查询的答案。但是怎么维护呢?对于位置 iii原创 2021-08-15 13:57:12 · 271 阅读 · 0 评论 -
NC14522 珂朵莉的数列 ( 树状数组 + 离散化 )
题目链接:点击进入题目思路若 a [ i ] 和 a [ j ] 是一对逆序对,那么它对答案贡献是 i * ( n - j + 1 ) ( 也就是对所有区间左边界在 [ 1 , i ] 范围内,区间右边界在 [ j , n ] 的范围的区间都有贡献 ) 。那么,我们可以枚举 j ,看前面有多少比它大的数,并求它们的坐标和,然后更新答案。求前面有多少个比它大的数,这个可以用树状数组实现 ( 例如此题 ) ,但是这里还要求坐标和,正常的操作我们是修改值为 1 ,最后求前缀的答案就是有多少个数存在,原创 2021-08-15 13:56:32 · 179 阅读 · 0 评论 -
树状数组 - 模板
学习链接:点击进入数组及函数c [ i ] = a ( i - 2 ^ k + 1 ) + … + a [ i ]( 这里 c 数组是根据 a 数组更新的,实现不同的功能,a 数组的含义不同 )( 设节点编号为 i ,那么这个节点管辖的区间有 2 ^ k( 其中 k 为 i 二进制末尾 0 的个数)个元素,且最后一个元素为 a [ i ] 。)lowbit ( i ) => i & -i 计算 i 对应的 2 ^ kadd 函数更新 i 这位以及它之后的包含它的区间对应的 c 数组原创 2021-08-06 15:38:21 · 175 阅读 · 0 评论 -
POJ - 3468 - A Simple Problem with Integers( 树状数组 -> 区间修改 + 区间查询 )
题目链接:点击进入题目题意n 个数,q 次询问:C a b c 区间 [ a , b ] 都加上 cQ a b 求 [ a , b ] 的和思路树状数组实现 -> 区间修改 + 区间查询( 线段树也可做 )代码// Problem: A Simple Problem with Integers// Contest: Virtual Judge - POJ// URL: https://vjudge.net/problem/POJ-3468// Memory Limit:原创 2021-08-04 22:53:58 · 315 阅读 · 0 评论 -
HDU - 1166 - 敌兵布阵( 树状数组 )
题目链接:点击进入题目思路树状数组实现-> 单点修改 + 区间查询( 这题线段树也可以写,不过树状数组码量要小 )代码// Problem: 敌兵布阵// Contest: Virtual Judge - HDU// URL: https://vjudge.net/problem/HDU-1166// Memory Limit: 32 MB// Time Limit: 1000 ms// // Powered by CP Editor (https://cpeditor.or原创 2021-08-04 22:53:46 · 201 阅读 · 0 评论 -
P3368 【模板】树状数组 2( 区间修改 + 单点查询 )
题目链接:点击进入题目思路树状数组实现-> 区间修改 + 单点查询c [ i ] = a ( i - 2 ^ k + 1 ) + … + a [ i ]( 设节点编号为 i ,那么这个节点管辖的区间有 2 ^ k( 其中 k 为 i 二进制末尾 0 的个数)个元素,且最后一个元素为 a [ i ] 。)lowbit ( i ) => i & -i 计算 i 对应的 2 ^ kadd 函数更新 i 这位以及它之后的包含它的区间对应的 c 数组getsum 函数求 1原创 2021-08-04 22:53:31 · 242 阅读 · 0 评论 -
P3374 【模板】树状数组 1( 单点修改 + 区间查询 )
题目链接:点击进入题目思路深入学习树状数组实现-> 单点修改 + 区间查询c [ i ] = a ( i - 2 ^ k + 1 ) + … + a [ i ]( 设节点编号为 i ,那么这个节点管辖的区间有 2 ^ k( 其中 k 为 i 二进制末尾 0 的个数)个元素,且最后一个元素为 a [ i ] 。)lowbit ( i ) => i & -i 计算 i 对应的 2 ^ kadd 函数更新 i 这位以及它之后的包含它的区间对应的 c 数组getsum 函原创 2021-08-04 22:53:15 · 207 阅读 · 0 评论 -
What Goes Up Must Come Down(树状数组求逆序对)
题意给你一个长度为n的数字序列,你每次可以交换任意两个相邻的数字,让你求出达到目标序列(前面不递减,后面不递增)思路原创 2020-10-10 18:54:50 · 574 阅读 · 0 评论