Pagini recente » Cod sursa (job #2455657) | Cod sursa (job #622703) | Cod sursa (job #284277) | Cod sursa (job #2065767) | Cod sursa (job #1857921)
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
#define inf 1000000002
int heap[200003],catev,cateheap,poz[200003],v[200003],t,n,q,cod,i,x;
void change(int &a,int &q)
{
t=a;
a=q;
q=t;
}
void upheap(int k)
{
while(k>1 and v[heap[k]]<v[heap[k/2]])
{
swap(heap[k],heap[k/2]);
swap(poz[heap[k]],poz[heap[k/2]]);
k/=2;
}
}
void downheap(int k)
{
do
{
t=0;
if(k*2<=cateheap)
{
t=k*2;
if(k*2+1<=cateheap and v[heap[k*2]]>v[heap[k*2+1]])
t=k*2+1;
if(v[heap[k]]>v[heap[t]])
{
swap(heap[k],heap[t]);
swap(poz[heap[k]],poz[heap[t]]);
k=t;
}
else
t=0;
}
}while(t);
}
int main()
{
f>>n;
for(q=1;q<=n;q++)
{
f>>cod;
if(cod==3)
{
g<<v[heap[1]]<<'\n';
}
if(cod==1)
{
f>>x;
catev+=1;
v[catev]=x;
cateheap+=1;
poz[catev]=cateheap;
heap[cateheap]=catev;
upheap(cateheap);
}
if(cod==2)
{
f>>x;
v[x]=-1;
upheap(poz[x]);
v[x]=inf;
downheap(1);
cateheap--;
}
}
return 0;
}