点击打开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; }
时间: 2024-11-03 22:15:33