Pagini recente » Cod sursa (job #3291067) | Cod sursa (job #2033077) | Clasament lh10 | Cod sursa (job #3259354) | Cod sursa (job #3250539)
#include <bits/stdc++.h>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
const int NMAX=2e5+1, VMAX=1e9+1;
struct nod
{
int val, poz;
};
nod v[NMAX];
int f[NMAX];
int n, m;
void insertfrunza()
{
int val;
in>>val;
v[++n].val=val;
m++;
v[n].poz=m;
int cn=n;
while(cn!=1)
{
if(v[cn].val<v[cn/2].val)
swap(v[cn], v[cn/2]);
cn=cn/2;
}
}
void taiefrunza()
{
swap(v[1], v[n]);
v[n].val=VMAX;
v[n].poz=0;
n--;
int i=1;
while((i*2<=n || i*2+1<=n) && (v[i].val>v[i*2].val || v[i].val>v[i*2+1].val))
{
int ram=i*2;
if(v[i*2].val>v[i*2+1].val)
ram=i*2+1;
swap(v[ram], v[i]);
i=ram;
}
}
int main()
{
int q;
in>>q;
for(int k=1; k<=q; k++)
{
int c;
in>>c;
if(c==1)
insertfrunza();
if(c==3)
out<<v[1].val<<'\n';
if(c==2)
{
int poz;
in>>poz;
f[poz]++;
int p=1;
while(f[v[1].poz]!=0)
{
taiefrunza();
}
}
}
return 0;
}