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;
}
posted @ 2020-10-26 17:28  yys_c  阅读(127)  评论(0编辑  收藏  举报