Pagini recente » Cod sursa (job #821059) | Cod sursa (job #55137) | Cod sursa (job #2892618) | Cod sursa (job #3132303) | Cod sursa (job #503633)
Cod sursa(job #503633)
using namespace std;
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<algorithm>
#define Nmax 200005
#define T ((i)/2)
#define L ((i)*2)
#define R ((L)+1)
ofstream fout("heapuri.out");
int nh=0,n=0,H[Nmax],d[Nmax],poz[Nmax];
int N;
inline void upheap(int i)
{
if(i<=1) return;
if(d[H[T]]>d[H[i]]) swap(poz[H[T]],poz[H[i]]), swap(H[i],H[T]), upheap(T);
}
inline void downheap(int i)
{
int m=i;
if(L<=nh)
if(d[H[m]]>d[H[L]])
m=L;
if(R<=nh)
if(d[H[m]]>d[H[R]])
m=R;
if(i!=m) swap(H[m],H[i]), swap(poz[H[m]], poz[H[i]]), downheap(m);
}
void cit()
{int i,c,x,y;
ifstream fin("heapuri.in");
fin>>N;
for(i=1;i<=N;i++)
{
fin>>c;
if(c==1)
{fin>>x;
n++;
nh++;
H[nh]=n;
d[n]=x;
poz[n]=nh;
upheap(nh);
}
if(c==2)
{
fin>>x;
y=poz[x];
swap(H[y],H[nh]);
swap(poz[H[y]],poz[H[nh]]); //watch out
nh--;
downheap(y);
}
if(c==3)
{
fout<<d[H[1]]<<"\n";
}
}
}
int main()
{
cit();
fout.close();
return 0;
}