Pagini recente » Cod sursa (job #2001154) | Cod sursa (job #1553543) | Cod sursa (job #1879079) | Arhiva de probleme | Cod sursa (job #1869890)
#include <bits/stdc++.h>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
const int Nmax = 200050;
int N, a[Nmax], poz[Nmax], p;
void Push(int x)
{
int k, tata;
a[++N] = x;
poz[N] = p;
k = N;
while(k > 1)
{
tata = k / 2;
if(a[k] >= a[tata])
return;
swap(a[k], a[tata]);
swap(poz[k], poz[tata]);
k = tata;
}
}
void Pop(int k)
{
int fiu;
a[k] = a[N];
poz[k] = poz[N];
N--;
while(2 * k <= N)
{
fiu = 2 * k;
if(fiu + 1 <= N && a[fiu] > a[fiu + 1])
fiu++;
if(a[k] <= a[fiu]) return;
swap(a[k], a[fiu]);
swap(poz[k], poz[fiu]);
k = fiu;
}
}
int main()
{
int i, op, x, m, pozitie, j;
f >> m;
for(i = 1; i <= m; i++)
{
f >> op;
if(op == 1)
{
f >> x;
p++;
Push(x);
}
else if(op == 2)
{
f >> x;
pozitie = -1;
for(j = 1; j <= N && pozitie == -1; j++)
if(poz[j] == x) pozitie = j;
Pop(pozitie);
}
else if(op == 3) g << a[1] << "\n";
}
return 0;
}