今天将树状数组看了看,觉得 树状数组真的挺神奇的呵呵...
要想掌握好树状数组就得将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; }