这个题很奇葩啊,感觉他把所有的事情都帮你做了,包括什么输入的顺序的的限制,先按照y的增,再按照x的增。
emmmm,一开始没看到这些条件,我以为是开二维数组,后来发现30000多的二维数组是开不出来的。而且题目也没有给出输入限制,emmmm,心态炸了。
#include <iostream>
#include<cstdio>
#include<string.h>
#include<cmath>
using namespace std;
#define MAX 32005
int c[MAX];
int level[MAX];
int lowbit(int x)
{
return x&(-x);
}
void updata(int x,int d)
{
for(int i =x ;i<MAX ; i+=lowbit(i))
{
c[i] = c[i]+d;
}
}
int getSum(int x)
{
int sum = 0 ;
for(int i = x ; i>0;i-=lowbit(i))
{
sum+=c[i];
}
return sum ;
}
int main(){
int N,x,y;
while(scanf("%d",&N)==1){
memset(level,0,sizeof(level));
memset(c,0,sizeof(c));
for(int i = 1 ; i <=N ; i++)
{
scanf("%d%d",&x,&y);
x++;
level[getSum(x)]++;
updata(x,1);
}
for(int i =0 ; i <N ;i++)
{
printf("%d\n",level[i]);
}
}
return 0 ;
}
本文介绍了一种使用一维树状数组解决特定坐标问题的方法。通过自定义的一维树状数组实现,该方案巧妙地处理了大量坐标点,并能够按照特定顺序进行高效查询与更新操作。文章详细解释了树状数组的实现原理及其在本问题中的应用。
586

被折叠的 条评论
为什么被折叠?



