用 priority_queue 與 unordered_map 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| #include<bits/stdc++.h> using namespace std;
int main(){ ios::sync_with_stdio(false);cin.tie(0);
priority_queue<int> mx; priority_queue<int,vector<int>,greater<int>> mn; unordered_map<int,int> s;
int t; while(cin>>t){ if(t==0) break;
if(t==-1){ while(!mn.empty() && !s[mn.top()]){ mn.pop(); } if(!mn.empty()){ cout<<mn.top()<<' '; s[mn.top()]--; mn.pop(); } }else if(t==-2){ while(!mx.empty() && !s[mx.top()]){ mx.pop(); } if(!mx.empty()){ cout<<mx.top()<<' '; s[mx.top()]--; mx.pop(); } }else{ s[t]++; mx.push(t); mn.push(t); } } return 0; }
|