学习了线段树之后,今天开始学习树状数组,还有很多不明白的地方,在几位同学的帮助下,基本达到了,虽然不懂,但这道入门题还是能AC的。。。。。。还得在今后的学习中进一步加强对线段树和树状数组的理解和运用!!!
#include<stdio.h>
#include<string.h>
#define M 32005
int c[M];
int ans[M];
int getsum(int k)
{
int t=0;
while(k>0)
{
t+=c[k];
k-=k&(-k);
}
return t;
}
void change(int k,int delta)
{
while(k<M)
{
c[k]=c[k]+delta;
k+=k&(-k);
}
}
int main()
{
int n;
while(scanf("%d",&n)==1)
{
int x,y;
memset(c,0,sizeof(c));
memset(ans,0,sizeof(ans));
for(int i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
x++;//避免有0出现;
int level=getsum(x);
ans[level]++;
change(x,1);//以0,1标记是否存在有比x小的数;
}
for(int i=0;i<n;i++)
printf("%d/n",ans[i]);
}
return 0;
}