Pagini recente » Borderou de evaluare (job #2903679) | Borderou de evaluare (job #1674672) | Borderou de evaluare (job #1234350) | Borderou de evaluare (job #3120912) | Cod sursa (job #2412754)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n, c, x, poz[200005], h[200005], k=0, pozitie=0;
void hcomb(int i, int l)
{
int v=h[i], tata=i, fiu=2*tata;
while (fiu<=l)
{
if (fiu<l)
if (h[fiu]>h[fiu+1]) fiu++;
if (v>h[fiu])
{
h[tata]=h[fiu];
tata=fiu;
fiu=2*fiu;
}
else fiu=l+1;
}
h[tata]=v;
}
void hins (int nr)
{
int fiu=++k, tata=k/2;
while (tata && h[tata]>nr)
{
h[fiu]=h[tata];
fiu=tata;
tata=tata/2;
}
h[fiu]=nr;
}
void heliminare(int element)
{
h[element]=h[k--];
hcomb(element, k);
}
int main()
{
f>>n;
for (int i=1;i<=n;i++)
{
f>>c;
if (c==1)
{
f>>x;
hins(x);
poz[++pozitie]=x;
}
else if (c==2)
{
f>>x;
heliminare(poz[x]);
}
else g<<h[1]<<'\n';
}
return 0;
}