Pagini recente » Cod sursa (job #1269706) | Cod sursa (job #785255) | Cod sursa (job #580130) | Cod sursa (job #2566090) | Cod sursa (job #2724239)
#include <fstream>
using namespace std;
#define NMAX 200005
ifstream cin("heapuri.in");
ofstream cout("heapuri.out");
struct elem
{
int val, idx;
};
elem h[NMAX];
int poz[NMAX],n;
void urc(int k)
{
while(k>1 && h[k].val < h[k/2].val)
{
poz[h[k].idx]=k/2;
poz[h[k/2].idx]=k;
swap(h[k],h[k/2]);
k=k/2;
}
}
void cobor(int k)
{
int fiumin;
while(2*k <= n)
{
fiumin=2*k;
if(2*k+1<=n && h[2*k+1].val<h[fiumin].val)
fiumin=2*k+1;
if(h[k].val > h[fiumin].val)
{
poz[h[fiumin].idx]=k;
poz[h[k].idx]=fiumin;
swap(h[k],h[fiumin]);
k=fiumin;
}
else
break;
}
}
int main()
{
int op, x, m, nr_ord=0;
cin>>m;
for(;m;m--)
{
cin>>op;
if(op==1)
{
cin>>x;
n++; nr_ord++;
h[n].val=x;h[n].idx=nr_ord;
poz[nr_ord]=n;
urc(n);
}
if(op==2)
{
cin>>x;
int p=poz[x];
poz[h[n].idx]= p;
poz[h[p].idx]=-1;
swap(h[p],h[n]);
n--;
cobor(p);
}
if(op==3)
cout<<h[1].val<<"\n";
}
return 0;
}