首页 > 其他分享 >STL之set

STL之set

时间:2023-11-27 17:57:18浏览次数:25  
标签:std set end STL 木材 st 集合

STL之set

木材仓库

题目描述

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

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

样例 #1

样例输入 #1

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

样例输出 #1

3
1
5
Empty

set 解法

  • 该题符合集合具备的特点,可以用 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;
    }
    
    

标签:std,set,end,STL,木材,st,集合
From: https://www.cnblogs.com/kdlyh/p/17859956.html

相关文章

  • [转]bat if语句中 set /p 接收不到用户输入 变量值空
    原文连接https://zhidao.baidu.com/question/496503004.html一、问题以下为bat代码,我健入1,进入if,我故意在if中用了goto循环用来验证是否接收到我输入的内容,我发现,第一次循环接收不到我输入的内容,从第二次循环开始就能够接收到了,请高手帮我修改下,我需要一进入if,用set/p就能够......
  • stl标准库
    STL标准库1.STL概念为了建立数据结构和算法的一套标准,并且降低他们之间的耦合关系,以提升各自的独立性、弹性、交互操作性(相互合作性,interoperability),诞生了STL​STL(StandardTemplateLibrary,标准模板库),是惠普实验室开发的一系列软件的统称。现在主要出现在c......
  • NX二次开发UF_CAM_set_clear_plane_data 函数介绍
    文章作者:里海UF_CAM_set_clear_plane_dataDefinedin:uf_cam_planes.h intUF_CAM_set_clear_plane_data(tag_tobject_tag,doubleorigin[3],doublenormal[3])overview概述Define/edittheoriginandnormalofaclearanceplane定义/编辑间隙平面的原点和法线UFU......
  • NX二次开发UF_CAM_set_material 函数介绍
    文章作者:里海UF_CAM_set_materialDefinedin:uf_cam.h intUF_CAM_set_material(tag_tobject_tag,char*libref)overview概述Thisfunctionsetsthematerialtypefortheinputobject.此函数设置输入对象的材质类型。UFUN例子parameters参数tag_tobject_tagInputTagto......
  • NX二次开发UF_CAM_PREF_set_logical_value 函数介绍
    文章作者:里海UF_CAM_PREF_set_logical_valueDefinedin:uf_cam_prefs.h intUF_CAM_PREF_set_logical_value(UF_CAM_PREF_tpref,logicalvalue)overview概述ThisfunctionsetsthelogicalsettingofthespecifiedCAMPreference.此函数设置指定CAM首选项的逻辑设置。U......
  • NX二次开发UF_CAM_set_clear_plane_usage 函数介绍
    文章作者:里海UF_CAM_set_clear_plane_usageDefinedin:uf_cam_planes.h intUF_CAM_set_clear_plane_usage(tag_tobject_tag,UF_PARAM_clrplane_usage_tusage)overview概述Settheusageofaclearanceplane设定清障飞机的用途UFUN例子parameters参数tag_tobject_tagInpu......
  • NX二次开发UF_CSYS_set_origin 函数介绍
    文章作者:里海UF_CSYS_set_originDefinedin:uf_csys.h intUF_CSYS_set_origin(tag_tcsys_tag,doubleorigin[3])overview概述Setoriginofcoordinatesystem.Notethatthisfunctionisnotvalidonthewcs.设置坐标系的原点,注意这个函数在wcs上是无效的。UFUN例......
  • NX二次开发UF_CAM_PREF_set_integer_value 函数介绍
    文章作者:里海UF_CAM_PREF_set_integer_valueDefinedin:uf_cam_prefs.h intUF_CAM_PREF_set_integer_value(UF_CAM_PREF_tpref,intvalue)overview概述ThisfunctionsetstheintegervalueofthespecifiedCAMPreference.此函数设置指定CAM首选项的整数值。UFUN例子p......
  • NX二次开发UF_CAM_wizard_set_current_object 函数介绍
    文章作者:里海UF_CAM_wizard_set_current_objectDefinedin:uf_ui_param.h intUF_CAM_wizard_set_current_object(tag_tparam_tag)overview概述Thisfunctionsetsthecurrentobjectthemanufacturingwizardshouldworkwith.Theobjectmustexistsinthecurrentwor......
  • NX二次开发UF_CSYS_set_wcs_display 函数介绍
    文章作者:里海UF_CSYS_set_wcs_displayDefinedin:uf_csys.h intUF_CSYS_set_wcs_display(intdisplay_status)overview概述Setdisplayofworkcoordinatesystem.展示工作坐标系。UFUN例子parameters参数intdisplay_statusInput1=thewcsshouldbedisplayed0=thewc......