zoukankan      html  css  js  c++  java
  • Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数。

    树状数组,上下区间更新都可以,差别不大。

    1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=100000+10;
    int ans[maxn],Tree[maxn],n;
    inline int lowbit(int x) //计算2^k
    {
        return (x&-x);
    }
    void add(int x,int value)
    {
        for(int i=x; i<maxn; i+=lowbit(i))
            Tree[i]+=value;
    }
    void up(int x,int val)
    {
        while(x>0)
        {
            Tree[x]+=val;
            x-=lowbit(x);
        }
    }
    int get(int x)
    {
        int sum=0;
        while(x<=n)
        {
            sum+=Tree[x];
            x+=lowbit(x);
        }
        return sum;
    }
    int main()
    {
        int x,y;
        while(~scanf("%d",&n)&&n)
        {
            memset(Tree,0,sizeof(Tree));
            for(int i=0;i<n;i++)
            {
                scanf("%d%d",&x,&y);
                up(y,1);
                up(x-1,-1);
            }
            for(int i=1;i<=n;i++)
                printf("%d%c",get(i),i==n?'
    ':' ');
        }
        return 0;
    }
    View Code

    2.对于[x,y]区间,对第y+1位减1,第x位加1,之后向下统计

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=100000+10;
    int ans[maxn],Tree[maxn];
    inline int lowbit(int x) //计算2^k
    {
        return (x&-x);
    }
    void add(int x,int value)
    {
        for(int i=x; i<maxn; i+=lowbit(i))
            Tree[i]+=value;
    }
    int get(int x)
    {
        int sum=0;
        for(int i=x; i>0; i-=lowbit(i))
            sum+=Tree[i];
        return sum;
    }
    int main()
    {
        int n,x,y;
        while(~scanf("%d",&n)&&n)
        {
            memset(Tree,0,sizeof(Tree));
            for(int i=0;i<n;i++)
            {
                scanf("%d%d",&x,&y);
                add(x,1);
                add(y+1,-1);
            }
            for(int i=1;i<=n;i++)
                printf("%d%c",get(i),i==n?'
    ':' ');
        }
        return 0;
    }
    View Code
  • 相关阅读:
    indy tcpclient tcpServer
    Delphi生成即调用带窗体的Dll
    本地同步到网络时间
    tfield的字段名和显示名
    Delphi流的操作_文件合并
    Delphi7 流操作_压缩
    delphi内嵌汇编
    给rar文件加个自定义头
    fastreport小入门
    delphi 单例模式
  • 原文地址:https://www.cnblogs.com/weimeiyuer/p/8358335.html
Copyright © 2011-2022 走看看