hdu1556(树状数组)

来源:互联网 发布:淘宝联盟怎么注册不上 编辑:程序博客网 时间:2024/06/03 13:21
题是树状数组模板题,要明白树状数组的操作原理以及改变方向,此题迎刃而解;具体看代码
#include<iostream>#include <string.h>using namespace std;int n;int c[100500];int lowbit(int x){return x&-x;}void update (int x,int sum){  while (x<=n)  {   c[x]+=sum;   x+=lowbit(x);  } }int  get_sum(int x){int sum=0;while (x>0){sum+=c[x];x-=lowbit(x);}return sum;}int main(){    int a,b;    while (scanf("%d",&n)!=EOF&&n)    {        int nu=n;        memset(c,0,sizeof(c));        while(nu--)        {            scanf("%d%d",&a,&b);            update(a,1); //将a节点以上加1,            update(b+1,-1);//将b节点以上减一, 最终结果是a与b间加一,最后直接输出get_sum(i)即为结果        }        for (int i=1;i<=n;i++)        {            if (i!=1)            printf(" ");            printf("%d",get_sum(i));        }        cout<<endl;    }    return 0;}

原创粉丝点击