Pagini recente » Cod sursa (job #1675613) | Cod sursa (job #1267906) | Cod sursa (job #2198875) | Cod sursa (job #1787588) | Cod sursa (job #2722574)
#include <bits/stdc++.h>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
struct heapuri
{
long long val,indv;
}heap[200100];
long long t,place[200100];
void up(long long nod)
{
if(nod>1)
{
if(heap[nod/2].val>heap[nod].val)
{
swap(heap[nod/2],heap[nod]);
place[heap[nod/2].indv]=nod/2;
place[heap[nod].indv]=nod;
up(nod/2);
}
}
}
void down(long long nod)
{
if(2*nod+1<=t)
{
if(heap[2*nod].val<=heap[2*nod+1].val)
{
swap(heap[nod],heap[2*nod]);
place[heap[nod].indv]=nod;
place[heap[2*nod].indv]=2*nod;
down(2*nod);
}
else
{
swap(heap[nod],heap[2*nod+1]);
place[heap[nod].indv]=nod;
place[heap[2*nod+1].indv]=2*nod+1;
down(2*nod+1);
}
}
else if(2*nod<=t)
{
swap(heap[nod],heap[2*nod]);
place[heap[nod].indv]=nod;
place[heap[2*nod].indv]=2*nod;
down(2*nod);
}
}
long long n,i,c,poz,x;
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>c;
if(c==1)
{
f>>x;
t++;
heap[t].val=x;
heap[t].indv=t;
place[i]=t;
up(t);
}
else if(c==2)
{
f>>x;
poz=place[x];
heap[poz].val=LONG_LONG_MAX;
down(poz);
}
else g<<heap[1].val<<'\n';
}
return 0;
}