Pagini recente » Cod sursa (job #2966210) | Cod sursa (job #785781) | Cod sursa (job #2842903) | Cod sursa (job #1854623) | Cod sursa (job #991393)
Cod sursa(job #991393)
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int heap[200010];
long long j,n,t,x,y,z,k,m,s,i,poz[200010],v[200010];
int main()
{
f>>n;
for(i=1;i<=n;i++)
v[i]=1000000010;
v[0]=1000000010;
i=k=0;
for(y=1;y<=n;y++)
{
f>>t;
if(t==3)
g<<v[heap[1]]<<'\n';
else
if(t==1)
{
f>>v[++i];
heap[++k]=i;
poz[i]=k;
s=k;
while(v[heap[s]]<v[heap[s/2]]&&s>1)
{
x=heap[s];
heap[s]=heap[s/2];
heap[s/2]=x;
poz[heap[s]]=s;
poz[heap[s/2]]=s/2;
s/=2;
}
}
else
{
f>>z;
s=poz[z];
heap[poz[z]]=heap[k];
poz[heap[poz[z]]]=poz[z];
heap[k]=0;
poz[z]=0;
v[z]=1000000010;
k--;
z=s;
while(v[heap[z]]<v[heap[z/2]]&&z>1)
{
x=heap[z];
heap[z]=heap[z/2];
heap[z/2]=heap[z];
poz[heap[z]]=z;
poz[heap[z/2]]=z/2;
z/=2;
}
while(v[heap[z]]>v[heap[z*2]]||v[heap[z]]>v[heap[z*2+1]])
{
if(v[heap[z*2]]<v[heap[z*2+1]])
j=z*2;
else
j=z*2+1;
x=heap[z];
heap[z]=heap[j];
heap[j]=x;
poz[heap[z]]=z;
poz[heap[j]]=j;
z=j;
}
}
}
return 0;
}