现在的位置: 首页 > 算法 > 正文

poj 2352 Stars(树状数组)

2019年04月02日 算法 ⁄ 共 609字 ⁄ 字号 评论关闭
题意:给出每个star的坐标,求出在它左下方这个区域里有多个星星

思路:用树状数组做 简洁明了。。。。

//420K   
157MS

#include <stdio.h>
#include <string.h>
#define lowbit(x) (x&(-x))
#define M 32010
int ar[M],n;

void add (int u,int w)
{
    while (u
< M)
    {
       
ar[u] += w;
       
u += lowbit(u);
    }
}
int sum (int u)
{
    int ans =
0;
    while (u
> 0)
    {
       
ans += ar[u];
       
u -= lowbit(u);
    }
    return
ans;
}
int main ()
{
    int
n,i,x,y;
    int
lev[M];
    while
(~scanf ("%d",&n))
    {
       
memset (ar,0,sizeof(ar));
       
for (i = 0;i < n; i ++)
       
{
           
scanf ("%d %d",&x,&y);
           
lev[sum(x+1)] ++;
           
add(x+1,1);
       
}
       
for (i = 0;i < n;i ++)
           
printf ("%d\n",lev[i]);
    }
    return
0;
}

抱歉!评论已关闭.