Pagini recente » Cod sursa (job #197497) | Cod sursa (job #1934402) | Cod sursa (job #1309771) | Cod sursa (job #1622242) | Cod sursa (job #2294957)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int v[200003],n,tip,nr,lv,poz[200003];///in poz[pozitia in v] am al catelea elem a intrat
int tata(int k)
{
return (k/2);
}
int st(int k)
{
int x=k*2;
if(x<n)
return x;
else return 0;
}
int dr(int k)
{
int x=k*2+1;
return (k*2+1);
}
void up(int k)
{
while(k>1 && v[k]<v[tata(k)])
{
swap(poz[k],poz[tata(k)]);
swap(v[k],v[tata(k)]);
k=tata(k);
}
}
void down(int k)
{
while(v[k]>v[st(k)] || v[k]>v[dr(k)])
{
if(v[st(k)]<v[dr(k)])
{
swap(poz[k],poz[st(k)]);
swap(v[k],v[st(k)]);
k=st(k);
}
else
{
swap(poz[k],poz[dr(k)]);
swap(v[k],v[dr(k)]);
k=dr(k);
}
}
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
{
f>>tip;
if(tip==1)
{
f>>nr;
lv++;
poz[lv]=i;
up(lv);
}
else if(tip==2)
{
f>>nr;
lv--;
v[nr]=v[lv+1];
poz[nr]=poz[lv+1];
if(v[nr]<v[tata(nr)])
up(nr);
else if(v[nr]>v[st(nr)] || v[nr]>v[dr(nr)])
down(nr);
}
else g<<v[1]<<'\n';
}
}