• HDU 2871"Memory Control"(线段树区间和并+set.lower_bound)


    传送门

    •题意

      有 n 个内存单元(编号从1开始);

      给出 4 种操作:

        (1)Reset :表示把所有的内存清空,然后输出 "Reset Now"。

        (2)New x :表示申请一块长度为 x 的内存块(满足起始地址尽可能小);

              如果找到,输出 "New at A",A表示该内存块的起点,找不到,输出 "Reject New"。

        (3)Free x :表示把包含第 x 块单位内存的内存块清除;

              如果 x 在某内存块中,输出 "Free from A toB",A和B分别表示该内存块的起点和终点,找不到,输出 "Reject Free"。

        (4)"Get x",表示返回第 x 块内存块的起始内存单位编号;

              如果找到,输出 "Get at A",A 表示第 x 块内存块的起始地址,找不到,输出 "Reject Get"。

    •题解

      类似于这道题【POJ3667 Hotel】,找连续的 x 个空内存单元,并满足起始地址尽可能小;

      唯一不同的是此题需要记录找到的内存块的地址;

      根据操作(3)(4)的要求,我们可以用 set 存储地址块;

      对于 (3) 操作调用 set 中的 upper_bound() 函数判断是否有解以及解的位置;

      对于 (4) 操作,在 set 中暴力查找即可;

    •Code

      HDU2871.cpp

  • 相关阅读:
    构建SpringBoot第一个Demo
    SpringBoot简介
    JSJ——主数据类型和引用
    CSS3--动态实现ToolTip效果(实例)
    JavaScript--DOM事件(笔记)
    CSS3--幽灵按钮特效(实例)
    CSS3--实现特殊阴影 (实例)
    深入浅出ExtJS 第七章 弹出窗口
    深入浅出ExtJS 第六章 布局
    深入浅出ExtJS 第五章 树形结构
  • 原文地址:https://www.cnblogs.com/violet-acmer/p/11691263.html
Copyright © 2020-2023  润新知