[poj 2352]Stars代码阅读记录[树状数组]

题意:

在一个坐标系内,给若干个点,每个点给定x、y坐标,定义点p的level为横纵坐标均不超过点p的点的个数,输出每个level包含的点的数量。

思路:

树状数组加速求和;

首先分析清楚如何求每个星星的level,以何顺序为正确.

其次就是树状数组的模板:

lowbit(i);

add(i,v);

GetSum(i);

//348K	125MS

#include 
#include 
using namespace std;
#define N 32005
const int MAXN = 15005;
int sum[N];
int result[MAXN];//result[i]表示第i级的星星个数
//算这个2^k有一个快捷的办法,定义一个函数如下即可
//利用机器补码的特点,这个函数可以改得更方便
int lowbit(int k)
{
    return k&(-k);
}
//如果要把a[i]增加v,可以通过调用如下函数实现
void add(int i,int v)//(x+1,1)
{
    while (i0)
    {
        s+=sum[i];
        i-=lowbit(i);
    }
    return s;
}
int main()
{
    int n,i,x,y;
    scanf("%d",&n);
    //初始化数组
    memset(result,0,sizeof(result));
    memset(sum,0,sizeof(sum));
    for(i=0; i


你可能感兴趣的:(树状数组)