Pagini recente » Cod sursa (job #114977) | Cod sursa (job #354554) | Cod sursa (job #1589639) | Cod sursa (job #1145791) | Cod sursa (job #1510508)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
const int IMAX=200005;
int h[IMAX],poz[IMAX],v[IMAX],nrh,nr;
void up_heap(int nod)
{
while(nod>1&&v[h[nod]]<v[h[nod/2]])
{
swap(h[nod],h[nod/2]);
swap(poz[h[nod]],poz[h[nod/2]]);
nod>>=1;
}
}
void down_heap(int nod)
{
while(nod*2<=nrh && (v[h[nod]]>v[h[nod*2]] || (nod*2+1<=nrh && v[h[nod]]>v[h[nod*2+1]])))
{
if(v[h[nod]]>v[h[nod*2]])
{
swap(h[nod],h[nod*2]);
swap(poz[h[nod]],poz[h[nod*2]]);
nod<<=1;
}
else
{
swap(h[nod],h[nod*2+1]);
swap(poz[h[nod]],poz[h[nod*2+1]]);
nod=nod*2+1;
}
}
}
int main()
{
ifstream si;
si.open("heapuri.in");
ofstream so;
so.open("heapuri.out");
int n;
si>>n;
int i,a,b;
for(i=0;i<n;++i)
{
si>>a;
if(a==1)
{
si>>v[++nr];
h[++nrh]=nr;
poz[nr]=nrh;
up_heap(nrh);
}
else if(a==2)
{
si>>b;
h[poz[b]]=h[nrh];
poz[h[nrh]]=poz[b];
nrh--;
down_heap(poz[b]);
}
else
so<<v[h[1]]<<'\n';
}
}