Pagini recente » Cod sursa (job #2965848) | Cod sursa (job #1039719) | Cod sursa (job #2435639) | Cod sursa (job #2108374) | Cod sursa (job #503631)
Cod sursa(job #503631)
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("heap.out");
int nh=0,n,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[L]])
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("heap.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;
}