Pagini recente » Cod sursa (job #2783025) | Cod sursa (job #2444034) | Cod sursa (job #1346964) | Cod sursa (job #443392) | Cod sursa (job #1634626)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
const int Nmax = 200005;
int Heap[Nmax], Pos[Nmax], A[Nmax], m, Nheap, n;
void Swap(int x, int y)
{
swap(Heap[x], Heap[y]);
swap(Pos[Heap[x]], Pos[Heap[y]]);
}
void Upheap(int nod)
{
int tata = nod/2;
if(tata && A[Heap[tata]] > A[Heap[nod]])
{
Swap(tata, nod);
Upheap(tata);
}
}
void Downheap(int nod)
{
int son = 2*nod;
if(son > Nheap) return;
if(son == Nheap && A[Heap[son]] < A[Heap[nod]])
{
Swap(nod, son);
return;
}
if(A[Heap[son]] < A[Heap[son+1]])
{
if(A[Heap[son]] < A[Heap[nod]])
{
Swap(nod, son);
Downheap(son);
}
}
else
{
if(A[Heap[son+1]] < A[Heap[nod]])
{
Swap(nod, son+1);
Downheap(son+1);
}
}
}
int main()
{
f>>n;
while(n--)
{
int opt, x;
f>>opt;
if(opt == 1)
{
f>>x;
A[++m] = x;
Heap[++Nheap] = m;
Pos[m] = Nheap;
Upheap(Nheap);
}
if(opt == 2)
{
f>>x;
int pos = Pos[x];
Swap(pos,Nheap--);
Downheap(pos);
}
if(opt == 3) g<<A[Heap[1]]<<'\n';
}
return 0;
}