Pagini recente » Cod sursa (job #2277875) | Cod sursa (job #2862979) | Cod sursa (job #2155229) | Statistici Popa Bogdan-Marian (Waninghekate12) | Cod sursa (job #2076010)
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n,i,op,x,contor,v[200001],w[200001],poz[200001],c,p,k,nr;
int main()
{
fin >> n;
for (i=1; i<=n; i++)
{
fin >> op;
if (op == 1)
{
fin >> x;
contor++;
v[++k] = x;///heap
w[k] = contor;///poz in care au fost puse nr
poz[contor] = k;///poz din heap a unui elem
c = k;
p = k/2;
while (p >= 0)
if (v[c] < v[p])
{
swap(v[c], v[p]);
swap(w[c], w[p]);
poz[w[p]] = p;
poz[w[c]] = c;
c = p;
p /= 2;
}
else
break;
}
if (op == 2)
{
fin >> x;
nr = poz[x];
c = nr;
p = nr/2;
v[nr] = v[k];
w[nr] = w[k];
poz[w[nr]] = poz[w[k]];
k--;
if (v[c] < v[p])
while (p >= 0)
if (v[c] < v[p])
{
swap(v[c], v[p]);
swap(w[c], w[p]);
poz[w[p]] = p;
poz[w[c]] = c;
c = p;
p /= 2;
}
else
break;
else
{
c = 2*nr;
p = nr;
while (c <= k)
{
if (c+1 <= k && v[c+1] < v[c])
c++;
swap(v[c], v[p]);
swap(w[c], w[p]);
poz[w[p]] = p;
poz[w[c]] = c;
p = c;
c *= 2;
}
}
}
if (op == 3)
fout << v[1] << "\n";
}
return 0;
}