Pagini recente » Rating Daescu Gabriel Florin (Gabriel_Daescu) | Cod sursa (job #4998) | Regat | Rating Diaconu Stefan (Steanfa) | Cod sursa (job #745089)
Cod sursa(job #745089)
using namespace std;
#include<iostream>
#include<fstream>
#define nmax 200020
//#define T (i)/2
#define T (i)/2
#define L (i)*2
#define R L+1
int n=0,nh=0;
int H[nmax],a[nmax],poz[nmax];
ofstream fout("heapuri.out");
void upheap(int i)
{
if(i<=1) return;
if(a[H[i]]<a[H[T]])
{
swap(H[i],H[T]);
swap(poz[H[i]],poz[H[T]]);
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()
{
int Ti,c,k=0,x,i,y;
ifstream fin("heapuri.in");
fin>>Ti;
while(Ti--)
{
fin>>c;
k++;
switch(c)
{
case 1:
fin>>x;
a[++n]=x;
nh++;
H[nh]=n;
poz[n]=nh;
upheap(poz[n]);
break;
case 2:
fin>>x;
y=poz[x];
swap(H[y],H[nh]);
swap(poz[H[y]],poz[H[nh]]);
nh--;
downheap(y);
break;
case 3:
fout<<a[H[1]]<<"\n";
}
}
fin.close();
}
int main()
{
cit();
return 0;
}