
树状数组
Bahuia
软件工程博士
展开
-
HDU - 1556 树状数组(区间修改+单点更新)
题意:n个数,初始化为0,每次给一段区间的数+1,最后输出n个数。思路:树状数组区间修改+单点查询的入门题,每次更新区间[l,r]的时候,给区间左端点l处+1,右端点后一个r+1处减1,这样,最后求i位置的值,只要从左往右求一遍前缀和,小于l的位置都没有增量,l到r之间会有增量1,r之后+1,-1相互抵消也没有增量。代码:#include using namespace st原创 2017-02-06 11:12:02 · 456 阅读 · 0 评论 -
HDU 5714 树状数组 + 离散化
题意:Problem Description小明在旅游的路上看到了一条美丽的河,河上有许多船只,有的船只向左航行,有的船只向右航行。小明希望拍下这一美丽的风景,并且把尽可能多的船只都完整地拍到一张照片中。小明位于河的边上,并且可以在河边的任意位置进行拍照,照相机的视野恰好为90度角,只能以垂直于河边的方向进行拍照。河上的船只全都可看作是平行于河边的一条线段,跟河边的距离各不原创 2017-03-10 16:46:19 · 450 阅读 · 0 评论 -
HDU - 5775 树状数组
题意:给出一个排列,要求用题目中的排序算法排序之后,算出每个数所到达的最左端和最右端位置的绝对值之差。思路:树状数组,每个数往右移动的距离就是右边比它小的数的个数,而左端点的位置就是初始位置和最终位置的较小值。代码:#include using namespace std;const int MAXN = 111111;struct BIT { int n;原创 2017-03-24 14:23:05 · 478 阅读 · 0 评论 -
HDU - 5792 树状数组 + 离散化
题意:题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5792 对于给出的数组A,求有多少个四元组< a,b,c,d >,满足a < b,c < d且A[a] < A[b]&&A[c] > A[d],其中a,b,c,d要两两不同。思路:离散化,然后树状数组统计正序对和逆序对,相乘的总和减掉其中有重复的即可。代码:#include <bits原创 2017-04-26 15:10:00 · 349 阅读 · 0 评论 -
Codeforces Round#427(Div.2) C题 二维BIT预处理
题意:题目链接:http://codeforces.com/contest/835/problem/C 给出n个坐标,每个坐标有亮度值,随着时间t的变化,亮度值每次+1,如果超越上界c,就变成0,之后随着时间变化继续+1。有q个询问,每次给出一个矩形范围和时刻t,求在时刻t,矩形范围内的点的亮度之和。思路:注意到坐标点的大小只有[1,100],而且上界c很小,因此可以考虑预处理出c以内每个时刻t的原创 2017-08-01 11:01:12 · 280 阅读 · 0 评论 -
SPOJ DQUERY 离线树状数组or主席树
题意:题目链接:http://acm.sdibt.edu.cn:8080/vjudge/problem/viewProblem.action?id=13725 给出n个数,问区间[L,R]中有多少不同的数。思路:经典题。 可以离线+树状数组,离线保存查询,按照r排序,用last数组保存每个数最接近当前询问r的位置。 也可以主席树,从右到左建树,pos保存每个数字的当前最左位置,每次在新版本的线原创 2017-10-01 22:34:58 · 492 阅读 · 0 评论