Pagini recente » Cod sursa (job #274039) | Cod sursa (job #1669543) | Cod sursa (job #2022018) | Cod sursa (job #1187050) | Cod sursa (job #1288285)
#include <fstream>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
const int nmax = 200000;
int h[nmax + 1] , v[nmax + 1] , poz[nmax + 1];
int n , nh;
void schimba(int i1 , int i2)
{
int aux = h[i1];
poz[h[i1]] = i2;
poz[h[i2]] = i1;
h[i1] = h[i2];
h[i2] = aux;
}
void urca(int i)
{
while(i >= 2 && v[h[i]] < v[h[i / 2]])
{
schimba(i , i / 2);
i /= 2;
}
}
void coboara(int i)
{
int fs = 2 * i , fd = 2 * i + 1 , bun = i;
if(fs <= nh && v[h[fs]] < v[h[i]])
bun = fs;
if(fd <= nh && v[h[fd]] < v[h[i]])
bun = fd;
if(bun != i)
{
schimba(i , bun);
coboara(bun);
}
}
int main()
{
in >> n;
int op , elem;
nh = 0;
for(int i = 1 ; i <= n ; i++)
{
in >> op;
if(op == 1)
{
in >> v[++nh];
h[nh] = nh;
poz[h[nh]] = nh;
urca(nh);
coboara(1);
}
else if(op == 2)
{
in >> elem;
elem = poz[elem];
schimba(elem , nh--);
urca(elem);
coboara(elem);
}
else
out << v[h[1]] << '\n';
}
return 0;
}