http://acm.hdu.edu.cn/showproblem.php?pid=1541
画星星,注意要把所有点向右平移一位,否则update会死循环(在(0,0))
ps:数组一定要开够啊啊啊
View Code
#include <stdio.h> #include <string.h> const int maxn1=15001; const int maxn2=32001; int n; int tree[maxn2],ans[maxn1]; int lowbit(int i){ return i&(-i); } void update(int i,int val) { while(i<=maxn2) { tree[i]+=val; i+=lowbit(i); } } int Sum(int i) { int sum=0; while(i>0) { sum+=tree[i]; i-=lowbit(i); } return sum; } int main() { int x,y,i; while(~scanf("%d",&n)) { memset(tree,0,sizeof(tree)); memset(ans,0,sizeof(ans)); for(i=0;i<n;i++) { scanf("%d%d",&x,&y); ans[Sum(++x)]++; update(x,1); } for(i=0;i<n;i++) printf("%d\n",ans[i]); } return 0; }