POJ_2352 Stars(树状数组)

  这题刚开始没看懂啥一个,琢磨了半天,看了看Discuss。其实就是求某个坐标点(x, y)的左下放还有几个点,很巧的是题目的数据都已经排好序了,所以根本不用考虑y的事,树状数组求和水过了。(注意,i = 0时死循环,要把数据都往后移一个!

#include <stdio.h>
#define N 32010

int c[N], ans[N];
int lowbit(int i)
{
return i&(i^(i-1));
}
void add(int i, int val)
{
i
++;
while(i < N)
{
c[i]
+= val;
i
+= lowbit(i);
}
}
int sum(int i)
{
i
++;
int s = 0;
while(i > 0)
{
s
+= c[i];
i
-= lowbit(i);
}
return s;
}
int main()
{
int t, i, a, b;
//freopen("data.in", "r", stdin);
scanf("%d", &t);
for(i = 1; i <= t; i++)
{
scanf(
"%d%d", &a, &b);
ans[sum(a)]
++;
//printf("1\n");
add(a, 1);
//printf("1\n");
}
for(i = 0; i < t; i++)
printf(
"%d\n", ans[i]);
return 0;
}
posted @ 2011-08-10 20:58  AC_Von  阅读(137)  评论(0编辑  收藏  举报