Pagini recente » Clasament rezolvarijudeteanaliceu | Cod sursa (job #2497997) | Cod sursa (job #2283006) | Cod sursa (job #530640) | Cod sursa (job #1636200)
#include <bits/stdc++.h>
#define N 200011
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int Heap[N + 5], poz[N + 5], A[N + 5];
int n, m, nHeap;
void Swap(int x, int y)
{
swap(Heap[x], Heap[y]);
swap(poz[Heap[x]], poz[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 fiu = 2*nod;
if(fiu > nHeap)
return;
if(fiu == nHeap && A[Heap[fiu]] < A[Heap[nod]])
{
Swap(nod, fiu);
return;
}
if(A[Heap[fiu]] < A[Heap[fiu+1]])
if(A[Heap[fiu]] < A[Heap[nod]])
{
Swap(nod, fiu);
Downheap(fiu);
}
else;
else if(A[Heap[fiu+1]] < A[Heap[nod]])
{
Swap(nod, fiu+1);
Downheap(fiu+1);
}
}
int main()
{
int cod, x;
fin >> n;
for(int i = 0; i < n; i++)
{
fin >> cod;
if(cod == 1)
{
fin >> x;
A[++m] = x;
Heap[++nHeap] = m;
poz[m] = nHeap;
Upheap(nHeap);
}
else if(cod == 2)
{
fin >> x;
int aux = poz[x];
Swap(aux, nHeap--);
Downheap(aux);
}
else
fout << A[Heap[1]] << '\n';
}
return 0;
}