首页 > 其他分享 >洛谷题单指南-集合-P5250 【深基17.例5】木材仓库

洛谷题单指南-集合-P5250 【深基17.例5】木材仓库

时间:2024-03-21 09:01:45浏览次数:36  
标签:begin set cout 17 洛谷题 深基 len 查找 iterator

原题链接:https://www.luogu.com.cn/problem/P5250

题意解读:根据题目要求,需要一种数据结构,支持去重、排序、logN的查找,set是最合适的。

解题思路:

先回顾一下set的关键操作:

设set<int> s;

1、添加:s.insert(x)

2、查询个数:s.count(x)

3、查找第一个>=x的元素,返回迭代器:set<int>::iterator it = s.lower_bound(x)

   查找第一个>x的原因,返回迭代器:set<int>::iterator it = s.upper_bound(x)

  3.1、如果查找到的是第一个元素:it == s.begin()

  3.2、如果查找不到:it == s.end()

4、迭代器的操作:it++、it--、++it、--it,*it

5、删除迭代器指向的元素:s.erase(it)

6、元素个数:s.size()

7、遍历:

for(auto i : s) cout << i;

for(auto it = s.begin(); it != s.end(); it++) cout << *it;

for(set<int>::iterator it = s.begin(); it != s.end(); it++) cout << *it;

直接利用set的性质即可解决本题。

100分代码:

#include <bits/stdc++.h>
using namespace std;

set<int> s;
int n, op, len;

int main()
{
    cin >> n;
    while(n--)
    {
        cin >> op >> len;
        if(op == 1)
        {
            if(s.count(len)) cout << "Already Exist" << endl;
            else s.insert(len);
        }
        else if(op == 2)
        {
            if(!s.size())
            {
                cout << "Empty" << endl;
                continue;
            }
            set<int>::iterator it = s.lower_bound(len); //查找大于等于len的第一个数
            if(it == s.begin()) //如果是第一个元素
            {
                cout << *it << endl; 
                s.erase(it);
            } 
            else if(it == s.end()) //如果没有找到,取最后一个元素
            {
                cout << *(--it) << endl;
                s.erase(it);
            }
            else{ 
                int a = *it; //a是当前数
                int b = *(--it); //b是前一个数
                if(a - len < len - b) //当前数距离len更近
                {
                    cout << a << endl;
                    s.erase(++it);
                }
                else //前一个数距离len更近,或者两个数距离len一样
                {
                    cout << b << endl;
                    s.erase(it);
                }
            } 
        }
    }
}

 

标签:begin,set,cout,17,洛谷题,深基,len,查找,iterator
From: https://www.cnblogs.com/jcwy/p/18086570

相关文章

  • CF817F MEX Queries 题解
    题目链接:CF或者洛谷不是很难的题,但在这里提供一个动态开点线段树怎么卡空间卡过去的极致空间处理技巧全局\(mex\)问题,常见的做法就是维护权值树,然后找第一个没有权值的点,可以维护\(\min\),但本题存在第三个操作,所以不能再去传统地维护\(\min或者\max\)去辅助二分了。观......
  • [ARC174B] Bought Review 题解
    【题目描述】你开了一家店,有\(A_i\)个\(i\)星级评论,你可以花费\(P_i\)元买到一个\(i\)星评论,问使得这家店评论的星星平均值不小于\(3\),最少要花多少钱。\(1\lei\le5\)。【思路】首先读入,判断平均值是否小于\(3\),如果大于等于,直接输出\(0\)​然后根据\(3\t......
  • spring使用jdk17运行出现编码问题
    遇到一个比较奇怪的问题。这个问题别人也遇到过。https://blog.csdn.net/gao_chuan_g/article/details/115117712一、情况简介使用jdk17+springboot3.x+spring6.x写一个小应用A,其中有一部分代码是用于生成SM2加密后的字符串,这个字符串会再做一些处理,最终会显示在前端的页面。......
  • CF765F,CF1793F,JSOI2009:区间最接近的两数
    link:https://codeforces.com/contest/765/problem/F据说是典中典问题(出现三次了)题意:给一个序列\(a_1,\dots,a_n\),有\(m\)次询问,每次询问给\(l,r(1\leql<r\leqn)\)问\(\min_{l\leqs<t\leqr}|a_s-a_t|\)\(1\leqn,m\leq10^5,a_i\leq10^9\).思路这个做法还是很妙,想......
  • 面试题 17.12. BiNodec
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*convertBiNode(structTreeNode*root){if(!root)returnNULL;if(!root->left......
  • 洛谷题单指南-集合-P3370 【模板】字符串哈希
    原题链接:https://www.luogu.com.cn/problem/P3370题意解读:本题要求理解哈希的原理,自行建立哈希表解题,如果直接使用map,就不推荐。解题思路:先介绍哈希的原理1、什么是哈希?什么是哈希表?先从一个问题出发:给定不超过105个整数(取值1~109),要统计不重复整数的数量。首先,如果取值范围......
  • UVM - 17(计分板和覆盖率)
    内容Scoreboard简介scoreboard:transactionstreamscoreboard实现方法不同的协议不同,数据类型不同in_order_class_comparator-按照一定的顺序比较comparator和两个monitor进行连接Scoreboard:monitorAgent中嵌入monitorUVMagent示例is_active-用于指......
  • ARC174D Digit vs Square Root 题解
    ARC174DDigitvsSquareRoot题目大意给定\(N\),求有多少个正整数\(x(1\leqx\leqN)\)满足:在十进制表示下,\(\lfloorx\rfloor\)是\(x\)的前缀。Solve很难直接手推性质,考虑用如下程序打表:#include<bits/stdc++.h>#pragmaGCCoptimize(1,2,3,"Ofast","inline")usin......
  • 洛谷题单指南-集合-P1536 村村通
    原题链接:https://www.luogu.com.cn/problem/P1536题意解读:城镇之间现有的道路关系可以将城镇划分的若干集合,每个集合内的城镇是互通的,要计算最少增加多少条道路,使得每个集合都相通。解题思路:利用并查集,统计一共出现多少个集合,即p[i]=i的数量,最少的道路数即集合数-1,即可把所......
  • 洛谷题单指南-集合-P1551 亲戚
    原题链接:https://www.luogu.com.cn/problem/P1551题意解读:要判断两人是否是亲戚,只需要看两人是否属于一个集合,基于所有已知的亲戚关系,可以建立多个有亲戚关系的集合,这个过程可以借助并查集。解题思路:并查集:1、定义并查集是一种树形数据结构,本质上是多棵树,每棵树表示一个集合,......