poj 2352 stars是树状数组的经典题目, lowbit(int x) 如果写成函数,就TLE了。写成宏,就是 150Ms AC。
下面是代码:
#include<iostream>
using namespace std;
#define lowbit(x) (x&(-x))
const int maxn=32000+10;
int arr[maxn];
int C[maxn];
//int lowbit(int x){
// return x&(-x);
//}
void update(int i,int value){
while(i<=maxn){
C[i]+=value;
i+=lowbit(i);
}
}
int getSum(int i){
int ans=0;
while(i>0){
ans+=C[i];
i-=lowbit(i);
}
return ans;
}
int main(){
freopen("in.txt","r",stdin);
int n,a,b,i;
scanf("%d",&n);
memset(C,0,sizeof(C));
memset(arr,0,sizeof(arr));
for(i=0;i<n;i++){
scanf("%d %d",&a,&b);
a++;
update(a,1);
arr[getSum(a)]++;
}
for(i=1;i<=n;i++){
printf("%d\n",arr[i]);
}
return 0;
}