Pagini recente » Cod sursa (job #990015) | Cod sursa (job #1045932) | Cod sursa (job #1974839) | Cod sursa (job #1649665) | Cod sursa (job #2510464)
#include<bits/stdc++.h>
#define all(s) s.begin(),s.end()
#define rc(x) return cout<<x<<endl,0
#define forn(i,n) for(int i=0;i<int(n);i++)
#define pb push_back
#define mp make_pair
#define fr first
#define sc second
typedef long long ll;
typedef long double ld;
const int nmax=1025;
const int mod=9973;
const ll inf=0x3f3f3f3f3f3f3f3f;
using namespace std;
int n;
vector<int>v,t;
void add(int x)
{
v.pb(x);
int i=v.size()-1;
while(i>0 && v[i]<v[(i-1)/2]) swap(v[i],v[(i-1)/2]),i=(i-1)/2;
}
void erase(int k)
{
int i=0;
while(i<v.size() && v[i]!=t[k-1]) i++;
if(i<v.size())
{
swap(v[i],v[v.size()-1]);
v.pop_back();
while(1)
{
int j=i;
if(2*i+1<v.size() && v[2*i+1]<v[j]) j=2*i+1;
if(2*i+2<v.size() && v[2*i+2]<v[j]) j=2*i+2;
if(j==i) break;
swap(v[i],v[j]);
i=j;
}
}
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
cin>>n;
while(n--)
{
int k;
cin>>k;
if(k==1)
{
int x;
cin>>x;
t.pb(x);
add(x);
} else
if(k==2)
{
int x;
cin>>x;
erase(x);
} else cout<<v[0]<<"\n";
}
}