This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub mugen1337/procon
#define PROBLEM "https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_9_C" #include "../template.hpp" #include "../Heap/LeftistHeap.hpp" signed main(){ LeftistHeap<int,false> que; string s; while(cin>>s,s!="end"){ if(s=="insert"){ int x;cin>>x; que.push(x); }else{ cout<<que.pop()<<endl; } } return 0; }
#line 1 "test/AOJ_ALDS1_9_C.test.cpp" #define PROBLEM "https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_9_C" #line 1 "template.hpp" #include<bits/stdc++.h> using namespace std; #define ALL(x) begin(x),end(x) #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<<x<<' ';}cout<<endl; #define mod 1000000007 using ll=long long; const int INF=1000000000; const ll LINF=1001002003004005006ll; int dx[]={1,0,-1,0},dy[]={0,1,0,-1}; // ll gcd(ll a,ll b){return b?gcd(b,a%b):a;} template<class T>bool chmax(T &a,const T &b){if(a<b){a=b;return true;}return false;} template<class T>bool chmin(T &a,const T &b){if(b<a){a=b;return true;}return false;} struct IOSetup{ IOSetup(){ cin.tie(0); ios::sync_with_stdio(0); cout<<fixed<<setprecision(12); } } iosetup; template<typename T> ostream &operator<<(ostream &os,const vector<T>&v){ for(int i=0;i<(int)v.size();i++) os<<v[i]<<(i+1==(int)v.size()?"":" "); return os; } template<typename T> istream &operator>>(istream &is,vector<T>&v){ for(T &x:v)is>>x; return is; } #line 4 "test/AOJ_ALDS1_9_C.test.cpp" #line 1 "Heap/LeftistHeap.hpp" template<typename T,bool less=true> struct LeftistHeap{ struct Node{ Node *l,*r; int s; T val; Node(T val):l(nullptr),r(nullptr),s(1),val(val){} }; Node *root; LeftistHeap(Node *t=nullptr):root(t){} Node *meld(Node *a,Node *b){ if(!a or !b) return (a?a:b); if((a->val>b->val)^(!less)) swap(a,b); a->r=meld(a->r,b); if(!a->l or a->l->s<a->r->s) swap(a->l,a->r); a->s=(a->r?a->r->s:0)+1; return a; } void meld(LeftistHeap b){ root=meld(root,b.root); } void push(T x){ root=meld(root,new Node(x)); } T pop(){ assert(root!=nullptr); T ret=root->val; root=meld(root->l,root->r); return ret; } T top(){ assert(root!=nullptr); return root->val; } bool empty(){ return root==nullptr; } }; #line 6 "test/AOJ_ALDS1_9_C.test.cpp" signed main(){ LeftistHeap<int,false> que; string s; while(cin>>s,s!="end"){ if(s=="insert"){ int x;cin>>x; que.push(x); }else{ cout<<que.pop()<<endl; } } return 0; }