转载请注明出处:http://blog.csdn.net/a1dark
分析:本是一道线段树的题、现在学了树状数组、那就用树状数组来做、感觉优化了很多、初学树状数组、感觉很神奇、 特别是lowbit函数、orz之。。。
#include<stdio.h> #include<string.h> int sum[32005]; int level[15005]; int n; int lowbit(int x) { return x&(-x); } int Getsum(int x){ int s=0; while(x>0){ s+=sum[x]; x-=lowbit(x); } return s; } int add(int x,int num) { while(x<=32003) { sum[x]+=num; x+=lowbit(x); } } int main() { int i,x,y; memset(level,0,sizeof(level)); memset(sum,0,sizeof(sum)); scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d",&x,&y); level[Getsum(x+1)]++; add(x+1,1); } for(i=0;i<n;i++){ printf("%d ",level[i]); } return 0; }