Pagini recente » Cod sursa (job #2953906) | Cod sursa (job #241680) | Cod sursa (job #3287974) | Cod sursa (job #1114742) | Cod sursa (job #2497414)
#include <iostream>
#include <fstream>
using namespace std;
struct node{
int val=10000000;
int cron;
}v[400002],auxh,big;
int n,i,index[400002],sizeh=1,x,crono=1,aux;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int main()
{
f>>n;
while(n)
{
f>>x;
if(x==3)
{
g<<v[1].val<<endl;}
else if(x==1)
{
f>>v[sizeh].val;
v[sizeh].cron=crono;
index[crono++]=sizeh;
i=sizeh++;
while(i>1&&v[i].val<v[i/2].val)
{
aux=index[v[i].cron];
index[v[i].cron]=index[v[i/2].cron];
index[v[i/2].cron]=aux;
auxh=v[i/2];
v[i/2]=v[i];
v[i]=auxh;
i/=2;
}
}
else
{
f>>x;
x=index[x];
sizeh--;
index[v[sizeh].cron]=x;
v[x]=v[sizeh];
v[sizeh]=big;
int m=min(v[x*2].val,v[x*2+1].val);
while(v[x].val>m&&x<sizeh)
{
if(v[x*2].val==m)
{aux=index[v[x].cron];
index[v[x].cron]=index[v[x*2].cron];
index[v[x*2].cron]=aux;
auxh=v[x*2];
v[x*2]=v[x];
v[x]=auxh;
x=x*2;
}
else
{aux=index[v[x].cron];
index[v[x].cron]=index[v[x*2+1].cron];
index[v[x*2+1].cron]=aux;
auxh=v[x*2+1];
v[x*2+1]=v[x];
v[x]=auxh;
x=x*2+1;
}
m=min(v[x*2].val,v[x*2+1].val);
}
}
n--;
}
}