zoukankan      html  css  js  c++  java
  • hdu 1556 果枫

    View Code
    #include<iostream>
    using namespace std;
    
    const int M=100000+9;
    
    struct treenode
    {
        int left;//左区间
        int right;//右区间
        int sum; //区间之和
    }node[M*3];//节点数大约是最大区间的3被
    
    
    void build(int low,int top,int index)//功能:建树
    {
        node[index].left=low;
        node[index].right=top;
        node[index].sum=0;
    
        if(low==top)   //是否递归到最低层
        {
    
            return ;
        }
    
        int mid=(low+top)/2;
    
        build(low,mid,index*2);
        build(mid+1,top,index*2+1);
    
        return ;
    
    }
    
    void updata(int low,int top,int index)//在区间节点上加1
    {
        int mid;
        if(low==node[index].left&&top==node[index].right)
        {
            node[index].sum++;
        }
        else
        {
            mid=(node[index].left+node[index].right)>>1;
    
            if(top<=mid)   //左子树
                updata(low,top,index*2);
            else
                if(low>mid)  //右子树
                    updata(low,top,index*2+1);
                else  //左右都存在
                {
                    updata(low,mid,index*2);
                    updata(mid+1,top,index*2+1);
                }
        }
    }
    
    int search(int low,int top,int index,int sum)//sum的作用是在找最底层时经过的节点要加到最底层的node[].sum上
    {
        if(node[index].left==low&&node[index].right==top)
            return node[index].sum+sum;
        int mid=(node[index].left+node[index].right)/2;
        if(top<=mid)
        {
            return search(low,top,index*2,sum+node[index].sum);
        }
        else
            return search(low,top,index*2+1,sum+node[index].sum);
    }
    
    
    int main()
    {
        int t;
        while(cin>>t,t)
        {
            int i,j;
            memset(node,0,sizeof(node));
            build(1,t,1);
            int a,b;
            for(i=0;i<t;i++)
            {
                cin>>a>>b;
                updata(a,b,1);
            }
            for(i=1;i<t;i++)
                cout<<search(i,i,1,0)<<" ";
            cout<<search(t,t,1,0)<<endl;
        }
        return 0;
    }
    /*
    3
    1 1
    2 2
    3 3
    3
    1 1
    1 2
    1 3
    */

    题意:中文题,此处省。

    ac代码:

  • 相关阅读:
    qt教程
    linux shell 教程
    CMakeList.txt学习
    tx2上直接编译带contrib cuda的opencv
    tx2 opencv交叉编译后的对应文件的放置位置
    opencv4.1.0 交叉编译遇到的问题
    docker 学习
    c++ 类注意点
    数据库整理(五)数据库编程 触发器 事务 过程
    数据库整理(四)数据库安全性与完整性
  • 原文地址:https://www.cnblogs.com/zgfailmr/p/2678848.html
Copyright © 2011-2022 走看看