題意:n個操作
Push 入容器
Pop彈出一個 滿足<=該數的最大的數(若沒有輸出No Element!)
開始用set打了一遍wrong了,這裡入容器的數是有重復的,所以用multiset
#include<stdio.h> #include<set> using namespace std; multiset<int>ss; multiset<int>::iterator p,q; int main(){ int n,t; char c[5]; while(~scanf("%d",&n)){ ss.clear(); while(n--){ scanf("%s %d",c,&t); if(c[1]=='u')ss.insert(t); else { if(ss.size()==0 || *ss.begin() > t){printf("No Element!\n");continue;} ss.insert(t); q=ss.find(t);//返回第一個等於t的迭代器 p=q; p++; if(p!=ss.end() && *p==t)t=*p; else {p--;p--;t=*p;} printf("%d\n",t); ss.erase(p); ss.erase(q); } } printf("\n"); } return 0; } /* 7 Push 2 Push 5 Pop 2 Pop 3 Pop 4 Pop 5 Pop 6 */