用宏确实比用函数效率高

来源:互联网 发布:阿里云域名变更 编辑:程序博客网 时间:2024/06/01 01:34

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;}