Pagini recente » Cod sursa (job #1829342) | Cod sursa (job #3125461) | Cod sursa (job #56412) | Cod sursa (job #3214993) | Cod sursa (job #2315900)
#include <bits/stdc++.h>
#define nmax 200005
using namespace std;
int v[nmax], heap[nmax], nheap,cnt;
int poz[nmax];
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
void heapnumber()
{
int nr;
fin>> v[++cnt];
poz[cnt] = ++nheap;
heap[nheap] = cnt;
nr = nheap;
while(v[heap[nr/2]] > v[heap[nr]] && nr > 1)
{
swap(poz[heap[nr/2]], poz[heap[nr]]);
swap(heap[nr/2],heap[nr]);
nr /= 2;
}
}
//primul element e 4 : poz[1] = 2;
//al doilea element e 3: poz[2] = 1; - heap[2]
void heapout()
{
// scot pe heap[poz[x]]
int fiu,x;
fin>>x;
int p = poz[x];
swap(poz[x], poz[heap[nheap]]);
swap(heap[p],heap[nheap]);
nheap--;
while (p * 2 <= nheap)
{
fiu = p * 2;
if(heap[p * 2 + 1] < heap[fiu])
fiu = p * 2 + 1;
swap(poz[p],poz[fiu]);
swap(heap[p],heap[fiu]);
p *= 2;
}
}
void Topheap()
{
fout<<v[heap[1]]<<"\n";
}
int main()
{
int i,q,op;
fin>>q;
for (i = 1 ; i<= q; i++)
{
fin>> op;
if (op == 1)
{
heapnumber();
}
else if(op == 2)
heapout();
else
Topheap();
}
fin.close();
fout.close();
return 0;
}