Pagini recente » Cod sursa (job #1910917) | Cod sursa (job #2500468) | Cod sursa (job #1423048) | Cod sursa (job #2796098) | Cod sursa (job #891349)
Cod sursa(job #891349)
#include<iostream>
#include<cstdio>
#define nmax 200010
using namespace std;
int n,x,cod,in[nmax],a[2*nmax],p[nmax],i,k;
void urc(int i)
{
if(i/2>=1)
{
if(a[i/2]>a[i])
{
swap(a[i/2],a[i]);
p[a[i]]=i;
p[a[i/2]]=i/2;
urc(i/2);
}
}
}
void pop(int x)
{
int r;
a[x]=a[k--];
while(2*x<=k)
{
int min=a[2*x];
r=2*x;
if(2*x+1<=k && min>a[2*x+1])
{
min=a[2*x+1];
r=2*x+1;
}
swap(a[x],a[r]);
p[a[x]]=x;
p[a[r]]=r;
x=r;
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&cod);
switch(cod)
{
case 1:
scanf("%d",&x);
in[++k]=x;
a[k]=x;
urc(k);
break;
case 2:
scanf("%d",&x);
pop(p[in[x]]);
break;
case 3:
printf("%d\n",a[1]);
break;
}
}
return 0;
}