Pagini recente » Cod sursa (job #757265) | Cod sursa (job #1882582) | Cod sursa (job #1723177) | Cod sursa (job #2160374) | Cod sursa (job #524495)
Cod sursa(job #524495)
using namespace std;
#include<iostream>
#include<fstream>
#define T (i)/2
#define L (i)*2
#define R (L)+1
#define nmax 200005
int n,nh,M;
int H[nmax],poz[nmax],a[nmax];
ofstream fout("heapuri.out");
void upheap(int i)
{
if(i<=1) return;
if(a[H[T]]>a[H[i]]) {swap(H[T],H[i]); swap(poz[H[T]],poz[H[i]]); upheap(T);}
}
void downheap(int i)
{
int m=i;
if(L<=nh)
if(a[H[m]]>a[H[L]])
m=L;
if(R<=nh)
if(a[H[m]]>a[H[R]])
m=R;
if(m!=i) {swap(H[m],H[i]);swap(poz[H[m]],poz[H[i]]);downheap(m);}
}
void cit()
{
ifstream fin("heapuri.in");
int x,op;
fin>>M;
while(M--)
{
fin>>op;
if(op==1)
{ fin>>x;
a[++n]=x;
nh++;
H[nh]=n;
poz[n]=nh;
upheap(poz[n]);
}
if(op==2)
{
fin>>x;
int y=poz[x];
swap(H[y],H[nh]);
swap(poz[H[y]],poz[H[nh]]);
nh--;
downheap(y);
}
if(op==3)
{
fout<<a[H[1]]<<"\n";
}
}
fin.close();
}
int main()
{
cit();
fout.close();
return 0;
}