Pagini recente » Cod sursa (job #378633) | Rating Aelx Paraschiv (222darkdark) | Cod sursa (job #1641149) | Cod sursa (job #1916697) | Cod sursa (job #2867868)
#include <bits/stdc++.h>
using namespace std;
#define nmax 200010
ifstream f ("heapuri.in");
ofstream g ("heapuri.out");
int n,l,nr;
int a[nmax],heap[nmax],pos[nmax];
void push(int x)
{
int aux;
while (x/2&&a[heap[x]]<a[heap[x/2]])
{
aux=heap[x];
heap[x]=heap[x/2];
heap[x/2]=aux;
pos[heap[x]]=x;
pos[heap[x/2]]=x/2;
x=x/2;
}
}
void pop(int x)
{
int aux,y=0;
while (x!=y)
{
y=x;
if (y*2<=l&&a[heap[x]]>a[heap[y*2]])
x=y*2;
if (y*2+1<=l&&a[heap[x]]>a[heap[y*2+1]])
x=y*2+1;
aux=heap[x];
heap[x]=heap[y];
heap[y]=aux;
pos[heap[x]]=x;
pos[heap[y]]=y;
}
}
int main()
{
int i,x,cod;
f>>n;
for (i=1;i<=n;i++)
{
f>>cod;
if (cod<3)
f>>x;
if (cod==1)
{
l++;
nr++;
a[nr]=x;
heap[l]=nr;
pos[nr]=l;
push(l);
}
if(cod==2)
{
a[x]=-1;
push(pos[x]);
pos[heap[1]]=0;
heap[1]=heap[l--];
pos[heap[1]]=1;
if (l>1)
pop(1);
}
if (cod==3)
g<<a[heap[1]]<<'\n';
}
return 0;
}