hdu 1556(树状数组区间更新,查询单点)

再次难受,这个题刚看线段树的时候写过一次,为了熟悉线段树看的题解,感觉挺简单就写上了,现在一看,发现事情并不简单,这个是区间更新,查询单点,第一次接触,发现,区间跟新只是更新区间内一个点,并不是区间内每个点都更新,而是在查询到区间内在某个点时,查到谁,谁就把这个点拿去用(暂时理解这么个意思,要是错了请指出,我是新手)。0

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=100000+10;
int c[maxn];
int n,a,b;
int lowbit(int x)
{
    return x&-x;
}
void add(int i,int x)
{
    while(i<=n)
    {
        c[i]+=x;
        i+=lowbit(i);
    }
}
int sum(int i)
{
  int sum=0;
   while(i>0)
   {
       sum+=c[i];
       i-=lowbit(i);
   }
   return sum;
}
int main()
{
    while(~scanf("%d",&n)&&n)
    {
        memset(c,0,sizeof(c));
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&a,&b);
            add(a,1);
            add(b+1,-1);
        }
       for(int i=1;i<n;i++)
        printf("%d ",sum(i));
       printf("%d\n",sum(n));
    }
    return 0;
}

 

posted on 2017-08-01 17:17  发牌员  阅读(146)  评论(0)    收藏  举报

导航