Pagini recente » Cod sursa (job #902790) | Cod sursa (job #3137250) | Cod sursa (job #1914114)
#include <iostream>
#include <fstream>
using namespace std;
int v[200001],ord[200001],poz[200001],s,i,nr,n,x,c;
void INSERT(int x, int k)
{
v[k]=x;
ord[k]=s;
poz[ord[k]]=k;
while(k>1 && v[k]<v[k/2])
{
swap(v[k],v[k/2]);
poz[ord[k]]=k/2;
poz[ord[k/2]]=k;
swap(ord[k],ord[k/2]);
k=k/2;
}
}
void DELETE(int k)
{
v[k]=v[nr];
poz[ord[nr]]=k;
ord[k]=ord[nr];
nr--;
while(k<=nr/2 && (v[k]>v[2*k] || (2*k+1<=nr && v[k]>v[2*k+1])))
{
int ind;
if(2*k+1>nr || v[2*k]<v[2*k+1])
ind=2*k;
else
ind=2*k+1;
swap(v[k], v[ind]);
poz[ord[k]]=ind;
poz[ord[ind]]=k;
swap(ord[k], ord[ind]);
k=ind;
}
}
int main()
{
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
scanf("%d", &n);
for(i=1; i<=n; i++)
{
scanf("%d", &c);
if(c==1)
{
scanf("%d", &x);
nr++;
s++;
INSERT(x,nr);
}
else
if(c==2)
{
scanf("%d", &x);
DELETE(poz[x]);
}
else
if(c==3)
printf("%d\n", v[1]);
}
return 0;
}