Pagini recente » Cod sursa (job #2699099) | Cod sursa (job #3240467) | Cod sursa (job #2352513) | Cod sursa (job #2125308) | Cod sursa (job #2371477)
#include <fstream>
#include <vector>
#define Nrp 10007
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,nr,m,ord[400003],ind,v[200003],c,poz[400003];
// ord ord int ->nod
//poz nod ->ord int
void Promote(int nod)
{
if(nod>1)
if(v[nod]<v[nod/2])
{
swap(v[nod],v[nod/2]);
ord[poz[nod]]=nod/2;
ord[poz[nod/2]]=nod;
swap(poz[nod],poz[nod/2]);
Promote(nod/2);
}
}
void Shift(int nod)
{
int son;
do
{
son=0;
if(nod*2<=n)son=nod*2;
if(nod*2+1<=n&&v[nod*2]>v[nod*2+1])son++;
if(v[son]<v[nod]&&son)
{
swap(v[son],v[nod]);
ord[poz[nod]]=son;
ord[poz[son]]=nod;
swap(poz[nod],poz[son]);
swap(son,nod);
}
else son=0;
}
while(son);
}
int main()
{
f>>m;
for(int i=1;i<=m;++i)
{
f>>c;
// for(int i=1;i<=n;++i)g<<v[i]<<" ";g<<'\n';
// for(int i=1;i<=n;++i)g<<ord[i]<<" ";g<<'\n';g<<'\n';
if(c==1)
{
n++;ind++;ord[ind]=n;
poz[n]=ind;
f>>nr;
v[n]=nr;
Promote(n);
}
if(c==2)
{
f>>nr;
v[ord[nr]]=v[n];
n--;
Shift(ord[nr]);
}
if(c==3)
{
g<<v[1]<<'\n';
}
}
return 0;
}