今天将树状数组看了看,觉得 树状数组真的挺神奇的呵呵...
要想掌握好树状数组就得将lowbit()函数先弄清楚,
而且也要懂得它的精华在哪里,
主要就是就几个主要的函数,比如 add() 比如 sum函数等等..贴出代码:
今天也看到了 要求 怎么样才是正规的写代码的方法, 以前自己感觉那么好的写代码的方法居然是错的....
以前总觉得 空格敲多了不好看,,而且自己还私认为,,,空格会影响编译...
但是看了华为要求的编程纲领...诶....很受伤啊!
而且慢慢的 也觉得 自己打字也很多 的毛病,首先就是指法不对,...
诶 这些字都是我用正确的指法打出来 的 因此,别扭的我要死,, 一个习惯真的狠难改变的,,而且我发现 我基本上是不用很多手指的...
贴出代码吧:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int ar[32005];
int c[32005];
int N;
int lowbit(int t)
{
return t&(-t);
}
void add(int t,int v)
{
for(int i=t ;i<=32005;i+=lowbit(i))
{
ar[i]+=v;
}
}
int sum(int t)
{
int s=0;
for(int i=t;i>0;i-=lowbit(i))
{
s+=ar[i];
}
return s;
}
int main()
{
int x,y;
while(scanf("%d",&N)!=EOF)
{
memset(ar,0,sizeof(ar));
memset(c,0,sizeof(c));
for(int i=1;i<=N;i++)
{
scanf("%d%d",&x,&y);
c[sum(x+1)]++;
add(x+1,1);
}
for(int j=0;j<N;j++)
{
printf("%d\n",c[j]);
}
}
return 0;
}