点击打开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;
}