Pagini recente » Cod sursa (job #3176292) | Cod sursa (job #875102) | Cod sursa (job #2403806) | Cod sursa (job #1939649) | Cod sursa (job #2296897)
#include <fstream>
#define nmax 200001
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int v[nmax],H[nmax],poz[nmax];
int n,q,x;
void Insert(int x)
{ while(x/2!=0 && v[H[x/2]]>v[H[x]])
{ swap(H[x/2],H[x]);
poz[H[x]]=x;
poz[H[x/2]]=x/2;
x/=2;
}
}
void Delete(int x,int len)
{ int y=0;
while(x!=y)
{ y=x;
if(2*y<=len && v[H[x]]>v[H[2*y]])
x=2*y;
if(2*y+1<=len && v[H[x]]>v[H[2*y+1]])
x=2*y+1;
swap(H[x],H[y]);
poz[H[x]]=x;
poz[H[y]]=y;
}
}
int main()
{
int i,len=0,nr=0;
fin>>n;
for(i=1;i<=n;i++)
{fin>>q;
if(q==1)
{fin>>x;
v[++nr]=x;
H[++len]=nr;
poz[nr]=len;
Insert(poz[nr]);
}
if(q==2)
{ fin>>x;
v[x]=-1;
Insert(poz[x]);
poz[H[1]]=0;
H[1]=H[len--];
poz[H[1]] = 1;
if(len>1) Delete(1,len);
}
if(q==3) fout<<v[H[1]]<<"\n";
}
return 0;
}