
树状数组
麻袋君
这个作者很懒,什么都没留下…
展开
-
poj 2299 Ultra-QuickSort 求逆序对
题目大意:给你一组序列,求得该组序列的逆序对;解题思路:这道题目可以用树状数组也可以用线段树;在插入的过程中不断的查询当前位置之前的数字个数和,然后用当前的位置减去这个和即可,因为如果查找到比你小的数,则说明它们在序列中当前位置的前面,而现在插入的个数为当前数字的位置,所以用插入的个数减去比当前位置小的个数,即为在当前位置比当前位置数字大的已经插入的数字的个数,即逆序对;但是这原创 2015-03-27 17:12:40 · 437 阅读 · 0 评论 -
poj 2352 stars 树状数组
题目大意:给你n个坐标,统计每一个坐标左下角坐标的个数;解题思路:因为已经对坐标排序好了,所以直接按顺序插入,然后统计个数即可;注意上限要开的大点,不然会爆错;为了防止0的问题,应该将坐标左移1位;#include#include#includeusing namespace std;#define maxn 50010int c[maxn];int n;in原创 2015-03-27 18:25:11 · 398 阅读 · 0 评论 -
hdu 1556 color the ball
题目大意:给区间染色,最后输出每个点的染色次数;解题思路:不管是向下修改,向上统计,还是向上修改,向下统计都可以,重点是理解更新和统计操作;这里以正常向上修改,向下统计为例;比如修改区间a,b,updata(a,1),updata(b+1,-1)这是什么意思?这里并没有修改整个区间,而是只是修改了区间开始,区间结束的下一个点总共俩个点,这样我们统计的时候直接getsum要求的点原创 2015-03-28 19:33:06 · 487 阅读 · 0 评论 -
poj 1195 Mobile phones
题目大意:有几种操作0 a:申请a*a的矩阵并且置零,只在第一条语句出现;1 x y a:在(x,y)这个点加a 2 x1 y1 x2 y2 :求这个区间的和3:结束解题思路:基本的二维树状数组操作,需要注意的是下标从0开始,所以遇到处理坐标的情况增加一位便可,避免处理0;#include#include#includeusing namespace st原创 2015-03-31 00:59:13 · 382 阅读 · 0 评论 -
poj 2029 Get Many Persimmon Trees 二维树状数组
题目大意:给你K个柿子坐标,m*n的土地,问你取s*t的土地,最大可以取到多少个柿子解题思路:枚举所有可能的结束位置,然后通过树状数组算出矩形中的和即可;#include#include#includeusing namespace std;#define maxn 110int c[maxn][maxn];int m,n;int lowbit(int x){ r原创 2015-04-01 01:26:03 · 378 阅读 · 0 评论 -
poj 3067 Japan
题目大意:给你k条路径,问这些路径有多少个交点;解题思路:开始的时候,我把第二个点降序,第一个点升序排列,但是处理了很久仍然wrong,没有办法,只能换网上的求逆序的方法;我们用(x,y)描述边;先将第一个x按升序排列,相同的时候则把y按升序排列,然后按照y的位置一边求逆序,一边更新;为什么这样处理呢?我们已经将x升序排列了,后面要插入的边的x肯定小于等于前面的x,这样的情原创 2015-04-01 00:16:40 · 421 阅读 · 0 评论 -
poj 2482 Cows
题目大意:农夫有很多牛,每个牛喜欢吃东西的范围为【si,ei】;如果牛j的范围[sj,ej]真包含牛i的范围,即Si Ej - Sj,则牛j比牛i强壮;问对于每一头牛有多少牛比它强壮;解题思路:如果一头牛比另外一头牛强壮,则反应在坐标上它的坐标应该在弱的那头牛的左上方;所以,我们可以先把e降序排列,如果e相等,则s升序排列;因为e已经排好序,所以我们统计的时候只要考虑s原创 2015-03-31 20:04:34 · 441 阅读 · 0 评论