hdu 1556 树状数组(区间更新,单点求和)

来源:互联网 发布:matlab如何编程 编辑:程序博客网 时间:2024/05/16 06:16

http://acm.hdu.edu.cn/showproblem.php?pid=1556

#include <stdio.h>#include <string.h>#define M 110000int c[M],n;int Lowbit(int x){return x&(-x);}void Add(int x,int d) //  1~x内的所有小区间个数 加 1 (更新区间) {while(x)  {c[x]+=d;x-=Lowbit(x);}}int sum(int x) //统计有多少个区间包括 端点x   {int ans=0;while(x<=n){ans+=c[x];x+=Lowbit(x);} return ans;}int main(){int i,j,k,a,b;while(scanf("%d",&n)&&n){memset(c,0,sizeof(c));for(i=1;i<=n;i++){scanf("%d%d",&a,&b);      Add(b,1);Add(a-1,-1);}for(i=1;i<=n;i++){if(i==1)printf("%d",sum(i));elseprintf(" %d",sum(i));}printf("\n");}return 0;}


0 0