且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

hdu 2275 Kiki & Little Kiki 1

更新时间:2022-08-19 22:34:50

点击打开hdu 2275
思路: multiset的应用
分析:
1 我们把所有的插入x全部插入到multiset
2 碰到删除的时候x的时候,我们就去判断
  如果集合为空或者集合的第一个元素大于x,那么肯定是没有的删除的
  否则我们去找x的位置,如果找到直接删除,如果没有找到那么我们先
  插入x,然后再去找x的位置,那么假设找到的位置为it,那么it的前一个位置
  肯定比x小,那这样同时删掉两个即可

代码:

#include<set>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int n;
multiset<int>st;

void solve(int x){
    if(st.empty() || x < *(st.begin())){
        puts("No Element!");
        return;
    }
    multiset<int>::iterator it;
    it = st.find(x);
    if(it != st.end()){
        printf("%d\n" , *it);
        st.erase(it);
    }
    else{
        multiset<int>::iterator it2;
        st.insert(x);
        it = it2 = st.find(x);
        it2--;
        printf("%d\n" , *it2);
        st.erase(it);
        st.erase(it2);
    }
}

int main(){
    char str[10];
    int x;
    while(scanf("%d%*c" , &n) != EOF){
        st.clear();
        while(n--){
            scanf("%s %d%*c" , str , &x); 
            if(!strcmp(str,"Push"))
                st.insert(x); 
            else
                solve(x);
        } 
        puts("");
    }
    return 0;
}