Pagini recente » Cod sursa (job #2874328) | Cod sursa (job #131579) | Cod sursa (job #452297) | Cod sursa (job #2456890) | Cod sursa (job #2964786)
#include <fstream>
#define NMAX 200005
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
struct Heap
{
int val, ord;
};
int nr, n;
Heap h[NMAX]; int poz[NMAX];
int c, x, counter;
int i;
void insertHeap(Heap [], int&, int, int);
void stergeHeap(Heap [], int&, int);
void combHeap(Heap [], int, int);
int minimHeap(Heap [], int);
void afisareHeap(Heap [], int);
int main()
{
fin >>nr;
for (i = 1; i <= nr; ++i)
{
fin >>c;
switch(c)
{
case 1:
fin >>x; counter++;
insertHeap(h, n, x, counter);
break;
case 2:
fin >>x;
stergeHeap(h, n, poz[x]);
break;
case 3:
fout <<minimHeap(h, n)<<'\n';
break;
}
}
fout.close();
return 0;
}
void insertHeap(Heap h[], int &n, int x, int nr)
{
int fiu = ++n;
int tata = fiu/2;
while (tata && h[tata].val > x)
{
h[fiu] = h[tata]; poz[h[tata].ord] = fiu;
fiu = tata;
tata = fiu/2;
}
h[fiu].val = x; h[fiu].ord = nr;
poz[h[fiu].ord] = fiu;
}
void stergeHeap(Heap h[], int &n, int x)
{
h[x] = h[n]; poz[h[n].ord] = x;
n--;
combHeap(h, n, x);
}
void combHeap(Heap h[], int n, int x)
{
int val = h[x].val; int ord = h[x].ord;
int tata = x, fiu = 2*x;
while (fiu <= n)
{
if (fiu < n)
if (h[fiu].val > h[fiu+1].val)
fiu ++;
if (val > h[fiu].val)
{
h[tata] = h[fiu]; poz[h[fiu].ord] = tata;
tata = fiu;
fiu = tata*2;
}
else fiu = n+1;
}
h[tata].val = val; h[tata].ord = ord;
poz[h[tata].ord] = tata;
}
int minimHeap(Heap h[], int n)
{
return h[1].val;
}
void afisareHeap(Heap h[], int n)
{
int i;
for (i = 1; i <= n; ++i)
fout <<h[i].val<<' ';
fout <<'\n';
}