Pagini recente » Cod sursa (job #2549468) | preoji_valoros | Cod sursa (job #2347390) | Cod sursa (job #1513402) | Cod sursa (job #2484195)
#include<fstream>
#include<iostream>
#define MAX 200005
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int m,q,n,val,a[MAX],c[MAX];
void insertIntoHeap(int val)
{
a[n++] = val;
c[n-1] = val;
int k = n-1;
while (a[(k - 1) / 2] > a[k])
{
swap(a[(k - 1) / 2], a[k]);
k = (k - 1) / 2;
}
}
void deleteFromHeap(int val)
{
int i;
val = c[val-1];
for (i = 0; i < n; ++i)
{
if (val == a[i])
break;
}
swap(a[i], a[n - 1]);
a[n - 1] = 0;
int k = i;
n--;
while (a[(k - 1) / 2] > a[k])
{
swap(a[(k - 1) / 2], a[k]);
k = (k - 1) / 2;
}
while (((2*k+1 < n) && a[k] > a[2 * k + 1]) || ((2*k+2 < n) && a[k] > a[2*k+2]))
{
if (a[k] > a[2 * k + 1])
{
swap(a[k], a[2 * k + 1]);
k = 2 * k + 1;
}
else
{
swap(a[k], a[2 * k + 2]);
k = 2 * k + 2;
}
if (k > n)
break;
}
}
int main()
{
f >> m;
for (int i = 0; i < m; ++i)
{
f >> q;
if (q == 1)
{
f >> val;
insertIntoHeap(val);
}
else if (q == 2)
{
f >> val;
deleteFromHeap(val);
}
else
{
g << a[0] << '\n';
}
}
}