【树状数组】 poj 2352

时间:2022-12-15 20:04:41

题意:给出n个平面二维坐标,对于每个坐标,如果这个坐标跟(0,0)形成的矩形内包含的点数为 k (包含边界,但不包含坐标本身),那么这个坐标就是 level k。输出level 0 - n-1的点数分别是多少。

思路:树状数组,线段树  稍后写一个线段树版本

#include <stdio.h>
#include <string.h>
#define N 15005
#define M 32005
int c[M], s[N];
int ans[N];
int n, max ,y;
int lowbit(int x)
{
return x&(-x);
} int sum(int x)
{
int sum=;
while(x>)
{
sum+=c[x];
x-=lowbit(x);
}
return sum;
} void change(int x,int val)
{
while(x<=max+)
{
c[x]+=val;
x+=lowbit(x);
}
} int main()
{
// freopen("in.txt", "r", stdin);
scanf("%d", &n);
max = ;
for(int i=; i<=n; i++)
{
scanf("%d%d", &s[i], &y);
max = s[i] > max ? s[i] : max;
}
memset(ans, , sizeof(ans));
for(int i=; i<=n; i++)
{
ans[sum(s[i]+)]++;
change(s[i]+,);
}
for(int i=;i<n;i++)
printf("%d\n", ans[i]);
return ;
}