STL之set

1|0STL之set

1|1木材仓库

1|0题目描述

博艾市有一个木材仓库,里面可以存储各种长度的木材,但是保证没有两个木材的长度是相同的。作为仓库负责人,你有时候会进货,有时候会出货,因此需要维护这个库存。有不超过 100000 条的操作:

  • 进货,格式1 Length:在仓库中放入一根长度为 Length(不超过 109) 的木材。如果已经有相同长度的木材那么输出Already Exist
  • 出货,格式2 Length:从仓库中取出长度为 Length 的木材。如果没有刚好长度的木材,取出仓库中存在的和要求长度最接近的木材。如果有多根木材符合要求,取出比较短的一根。输出取出的木材长度。如果仓库是空的,输出Empty

1|0样例 #1

1|0样例输入 #1

7 1 1 1 5 1 3 2 3 2 3 2 3 2 3

1|0样例输出 #1

3 1 5 Empty

1|0set 解法

  • 该题符合集合具备的特点,可以用 set 解。

  • set 常见功能

    • set<int> st
      • 建立一个元素类型为 int 的集合。
    • st.insert(x)
      • 插入元素 x,如果这个元素已存在则什么也不做。
    • st.erase(x)
      • 删除元素 x,如果这个元素不存在则什么也不做。
    • st.erase(it)
      • 删除迭代器 it对应的元素。
    • st.end()
      • 返回集合中最后一个元素的下一位的地址,一般配合其他方法做判断。
    • st.find(x)
      • 查询 x 在集合中的地址,如果这个数不存在,则返回 st.end()
    • st.lower_bound(x)
      • 查询大于或等于 x 的最小的数在集合中的地址,如果这个数不存在,则返回 st.end()
    • st.upper_bound(x)
      • 查询大于 x 的最小的数在集合中的地址,如果这个数不存在,则返回 st.end()
    • st.empty()
      • 如果集合为空,则返回真值。
    • st.size()
      • 集合元素个数。
  • 代码实现

    #include<iostream> #include<algorithm> #include<cstdio> #include<set> int n, x, opt; std::set<int> st; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); std::cin >> n; for (int i = 1; i <= n; i++) { std::cin >> opt >> x; if (opt == 1) { if (st.find(x) != st.end()) { std::cout << "Already Exist\n"; } else { st.insert(x); } } else { if (st.empty()) { std::cout << "Empty\n"; } else if (st.find(x) != st.end()) { st.erase(x); std::cout << x << std::endl; } else { std::set<int>::iterator i = st.lower_bound(x), j = i;//找第一个大于的(等于的已经在上面处理过了) if (j != st.begin()) --j;//减去之后是最后一个小于的 if (i != st.end() && x - (*j) > (*i) - x) j = i;//即从最小的大于x的数和最大的小于x的数之间比较 std::cout << *j << std::endl; st.erase(j); } } } return 0; }

__EOF__

本文作者Kdlyh
本文链接https://www.cnblogs.com/kdlyh/p/17859956.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   加固文明幻景  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示