• HDU 2795 Billboard(线段树)


    比赛时对这种线段树裸题都不够敏感,还是题做的太少了啊

    因为前面有道题和这题内存限制一样爆内存了,这题一看数据也以为会爆,其实还是没认真去想,因为 n 次询问的范围很小,所以最多也就用 n 行,并不会爆内存

    不过赛后自己不看题解也还是不会啊

    原题

    #include<bits/stdc++.h>
    using namespace std;
    struct p
    {
       int l,r,len;
    }t[800005];
    void build(int p,int l,int r,int w)
    {
       t[p].l=l,t[p].r=r;
       t[p].len=w;
       if(l==r)
       {
         return ;
       }
       int mid=l+r>>1;
       build(p<<1,l,mid,w);
       build(p<<1|1,mid+1,r,w);
    //      t[p].len=max(t[p<<1].len,t[p<<1|1].len);
    }
    void change(int p,int k)
    {
       if(t[p].l==t[p].r)
       {
         printf("%d
    ",t[p].l);
         t[p].len-=k;
         return ;
       }
       if(k<=t[p<<1].len)//这里因为要先贴上面的,所以先和t[p<<1].len比较
        change(p<<1,k);
       else
        change(p<<1|1,k);
       t[p].len=max(t[p<<1].len,t[p<<1|1].len);
    }
    int main()
    {
        int h,w,n;
        while(cin>>h>>w>>n)
        {
           build(1,1,min(h,n),w);
           int k;
           for(int i=1;i<=n;i++)
           {
           scanf("%d",&k);
           if(k>t[1].len)//直接看能不能把 k 大小贴上,不行输出 -1
            printf("-1
    ");
           else
            change(1,k);
           }
        }
    return 0;
    }
    
    戒骄戒躁,百炼成钢!
  • 相关阅读:
    将Ubuntu18.04安装到U盘,实现即插即用
    小技巧之 前端自适应
    web笔记之 环境搭建
    C++学习笔记之 单例模式
    推荐一款Markdown编辑器:typora
    C++学习笔记之 类和对象
    C++学习笔记之 函数
    C++学习笔记之 内联函数
    C++学习笔记之 引用
    C++学习笔记之 const
  • 原文地址:https://www.cnblogs.com/Pecoz/p/12605923.html
Copyright © 2020-2023  润新知