• P5250 【深基17.例5】木材仓库


    set的使用注意:

    错误1.

    a = s.begin();
    -- a;
    s.erase(a); // 错误,未知行为,不知道会发生什么
    

    错误2.

    a = s.end();
    s.erase(a); // 错误
    ++ a; // 错误,未定义操作
    

    综上:set的begin前面的迭代器end及end以后的迭代器不可以使用,不管要干什么。

    #include<iostream>
    #include<set>
    
    using namespace std;
    
    set<int> s;
    int n;
    
    int main(){
        
        cin >> n;
        
        while(n --){
            int k, l;
            cin >> k >> l;
            
            if(k == 1){
                if(s.count(l) == 0) s.insert(l);
                else puts("Already Exist");
            }else{
                if(s.size() == 0){
                    puts("Empty");
                    continue;
                }
                
                
                
                auto a = s.lower_bound(l);
                
                if(a == s.begin()){
                    cout << *a << endl;
                    s.erase(s.begin());
                    continue;
                }
                
                if(a == s.end()){
                    -- a;
                    cout << *a << endl;
                    s.erase(a);
                    continue;
                }
                
                int x = *a - l;
                -- a;
                if(l - *a <= x) cout << *a;
                else cout << *(++ a);
                s.erase(a);
                puts("");
            }
        }
        
        return 0;
    }
    
  • 相关阅读:
    JVM相关知识
    面试之mysql专题
    Java新特性
    数据结构操作与算法复杂度分析
    IO流
    浅谈Web安全
    面试题2
    需要知道的HTTP 知识
    How JavaScript Work
    webpack 学习笔记
  • 原文地址:https://www.cnblogs.com/tomori/p/13879652.html
Copyright © 2020-2023  润新知