
【树状数组】
WangMeow
这个作者很懒,什么都没留下…
展开
-
[51Nod](1081)子段求和 ---- 树状数组
给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和。 例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1。3 + 7 + 9 = 19,输出19。Input第1行:一个数N,N为数组的长度(2 <= N <= 50000)。 第2 至 N + 1行:数组的N个元素。(-10^9 <= N[i]...原创 2018-04-12 17:39:06 · 167 阅读 · 0 评论 -
Codeforces Round #333 (Div. 2) B. Approximating a Constant Range ---- 尺取+树状数组(区间最值)
题目传送门做法:在尺取的过程中用树状数组查询区间最值。复杂度O(2*n*log^2(n))AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(x)#define ...原创 2018-09-27 16:52:09 · 138 阅读 · 0 评论 -
[POJ](2352)Stars ---- 树状数组
题目链接做法:题目已经向你保证,输入的x,y中,y递增,如果y相同,x递增。酱紫其实已经帮助我们处理好了它们的优先级。因为y越大,x越大的优先级越高。所以我们直接用x的值进行区间的查询。query(x)就是找<=x位置的元素有多少个。AC代码:#include <iostream>#include <cstdio>#include <cst...原创 2018-09-15 11:10:20 · 132 阅读 · 0 评论 -
[HDU](2852)KiKi's K-Number ---- 树状数组+二分★
题目传送门做法:类似于逆序数的思想,我们把元素值作为索引加入树状数组。我们再query(x) 所得到就是[1,x] 元素的个数,也相当于这个元素在这个无序序列中的权重。 举个栗子: a[1] = 27 a[2] = 31 a[3] = 15 a[4] = 28 for(int i=1;i<=4;i++) update(a[i],1); for(int i=1;i<=4...原创 2018-09-18 18:13:00 · 171 阅读 · 0 评论 -
[POJ](1900)MooFest ---- 树状数组★
题目传送门题意:有n头牛在x轴上,每头牛具有两个属性,听力值vi和坐标xi,两头牛i,j沟通需要消耗 max(vi,vj) * abs(xi-xj) 现在问你所有任意两头牛所需要消耗的总值,共n*(n-1)/2种做法:首先暴力肯定是不行滴~ 我们为了优化计算,我们可以先根据牛的听力值从小到大排序。 那么 ans = v1*(第1头牛与其他牛的距离差的和)+v2*(第2头牛与其他...原创 2018-09-18 09:29:12 · 193 阅读 · 0 评论 -
[POJ](2309)BST ---- 树状数组lowbit
题目传送门做法:其实还是从题目中给的这棵二叉搜索树找规律,我们发现最小的其实就是 x-lowbit(x)+1,即树状数组中x位置所维护的区间的左端点,接机推出最大即x+lowbit(x)-1;AC代码:#include <iostream>#include <cmath>#include <cstdio>#include <algori...原创 2018-09-17 19:28:36 · 190 阅读 · 0 评论 -
[POJ](3321)Apple Tree ---- 树形结构转线性区间+树状数组
题目传送门做法:这个题可以作为树状数组的好题了~ 难点不在于树状数组,而在于转换问题。 数据结构不熟,看了其他人的博客,才知道可以通过先序遍历这棵树,进行转换。 比如我现在建立一棵树: 1 ---- 2 1 ---- 3 2 ---- 4 2 ---- 5 4 ---- 6 3 ---- 7 3 ---- 8 然后从根节点1,先序遍历 次序为:1 2 4 6 5 3...原创 2018-09-17 15:39:28 · 199 阅读 · 0 评论 -
[洛谷](P3372)【模板】线段树 1 ---- 树状数组解法
题目链接复习:树状数组的区间修改和区间查询~ 理解区间修改,单点查询后这个就很容易理解啦~原理:超级树状数组AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(...原创 2018-09-09 11:51:14 · 200 阅读 · 0 评论 -
[51Nod](1019)逆序数 ---- 树状数组+离散化★
题目链接做法:复习一下树状数组~ 首先直接暴力求的话,O(n^2) 一定会超时。(`・ω・´) 为什么有时这句话总出现在博文呢?因为提醒自己有时不要瞎暴力 利用树状数组求逆序数是非常经典的一种写法,下面说一下我自己的理解 利用树状数组的特点,单点修改和区间查询的特性。 1.对于每一个位置的数,我们update更新,从这个位置更新值(val+1),即比我大的数都加1(包括自己)。 ...原创 2018-09-05 21:32:54 · 169 阅读 · 0 评论 -
【ACM-ICPC 2018 徐州赛区网络预赛】H题 Ryuji doesn't want to study ---- 树状数组
题目链接做法:我们知道我们想要的答案的式子中,相邻两项的系数差1,所以我们构造出类似这样的情况 如下图所示 n*a1 (n-1)*a2 (n-2)*a3 (n-3)*a4 (n-4)*a5 (n-5)*a6 (n-6)*a7 (n-7)*a8比如n = 8 想查询[2,4] 答案ans = (4-2+1)*a2+(...原创 2018-09-11 21:10:15 · 164 阅读 · 0 评论 -
[洛谷](P3368)【模板】树状数组 2
题目链接复习树状数组,区间修改,单点查询#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(x)#define sz(x) (int)(x).size()#defi...原创 2018-09-08 19:38:02 · 153 阅读 · 0 评论 -
[HDU](1754)I Hate It ---- 树状数组(区间最值问题)
题目链接复习:线段树功能很强大,但是敲起来不如树状数组简洁(但是但是线段树仍然赛高(`・ω・´))。所以这次复习下树状数组的区间最值写法。原理类似区间求和,单点修改。有一个博主写的博客不错,之前也是学习的他的。安利下,自己就不写教程了,这里练下手,复习下~【树状数组求区间最大值】AC代码:#include<bits/stdc++.h>#define IO ios...原创 2018-09-07 22:00:09 · 218 阅读 · 0 评论 -
[HDU] (3874) Necklace ---- 离线操作+树状数组
题目传送门几乎完全一样的题目(区间内不同数的个数): 传送门题意: 给你n个数,q次查询,问这个区间内,区间内数的和为多少,每个不同的数只能取一次。做法:莫队也可做,但是了解到树状数组也可以进行离线操作。思路就是,记录相同数字中上一个数字出现的位置。按照查询区间的右端点排序,从小到大访问右端点,更新当前位置时,如果之前有出现过相同的数字,相同数字所在的位置处更新为-a[i],否则更新...原创 2018-10-25 16:04:27 · 332 阅读 · 0 评论