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;
}