Pagini recente » Cod sursa (job #2981592) | Cod sursa (job #1768126) | Cod sursa (job #1912744) | Cod sursa (job #23880) | Cod sursa (job #1918689)
#include <fstream>
#define NMAX 200005
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n, H[NMAX], inserted[NMAX], position[NMAX];
void heap_insert(int i)
{
++n;
int tata = n/2, fiu = n;
while(H[tata] > i && tata > 0)
{
H[fiu] = H[tata];
position[H[tata]] = fiu;
fiu = tata;
tata /= 2;
}
H[fiu] = i;
position[i] = fiu;
}
void heap_delete(int i)
{
int aux;
/*for(int k = 1; k <= n; k++)
if(H[k] == i)
{
i = k;
break;
}*/
H[i] = H[n];
n--;
int fiu = 2*i, tata = i;
if(fiu < n)
if(H[fiu] > H[fiu + 1])
++fiu;
while(H[tata] > H[fiu] && fiu <= n)
{
aux = H[tata];
H[tata] = H[fiu];
H[fiu] = aux;
position[H[tata]] = fiu;
position[H[fiu]] = tata;
tata = fiu;
fiu *= 2;
if(fiu < n)
if(H[fiu] > H[fiu + 1])
++fiu;
}
}
int main()
{
int p, k, i, o, no = 0;
fin >> p;
for(k = 1; k <= p; k++)
{
fin >> o;
if(o == 1)
{
fin >> i;
++no;
inserted[no] = i;
heap_insert(i);
}
else
if(o == 2)
{
fin >> i;
heap_delete(position[inserted[i]]);
}
else
{
fout << H[1] << '\n';
}
}
return 0;
}