题意是在一个二维数组中统计星星个数,刚开始想到用二维树状数组可以很容易的解决,但这样内存是不允许的,题目的关键是给定的星星的已经按y坐标排序了且y相同的时候,再按x排序,所以利用这一点,可以仍容易的用一维树状数组解决。每次按顺序把y映射到x上即可。
Memory: 608K Time: 391MS
Language: G++ Result: Accepted
Source Code
#include "stdio.h"
#include "string.h"
#define N 32002
int C[N]={0};
int B[15002]={0};
int n;
int lowbit(int r)
{
return r&(r^(r-1));
}
void Add(int r,int t)
{
while(r<=N)
{
C[r]+=t;
r+=lowbit(r);
}
}
int Sum(int r)
{
int sum=0;
while(r>0)
{
sum+=C[r];
r-=lowbit(r);
}
return sum;
}
int main()
{
int x,y;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
B[Sum(x+1)]++;
Add(x+1,1);
}
for(int i=0;i<n;i++)
printf("%d/n",B[i]);
return 0;
}