Pagini recente » Istoria paginii runda/pregatire_pt_oji/clasament | Calibrare limite de timp | Cod sursa (job #1054332) | Istoria paginii runda/simulare67/clasament | Cod sursa (job #2905098)
#include <iostream>
using namespace std;
const int N=205;
int k[N+1],poz[N+1],v[N+1],nh;
void schimb(int p1,int p2)
{
swap(h[p1],h[p2]);
poz[h[p1]]=p1;
poz[h[p2]=p2;
}
void coboara(int p)
{
int fs=2*p,fd=2*p+1,bun=p;
if(fs<=nh && v[h[fs]]<v[h[bun]])
{
bun=fs;
}
if(fs<=nh && v[h[fd]]<v[h[bun]])
{
bun=fd;
}
if(bun!=p)
{
schimb(p,bun);
coboara(bun);
}
}
void urca(int p)
{
while(p>1&&v[h[p]]<v[h[p/z]])
{
schimb(p,p/2);
p/=2;
}
}
void adauga(int val)
{
h[++nh]=val;
poz[val]=nh;
urca(nh);
}
void sterge(int p)
{
if(p==nh)
{
nh--;
return;
}
schimb(p,nh--);
urca(p);
coboara(p);
}
int main()
{
int n=0,s;
in>>s;
for(int i=0;i<s;i++)
{
int a;
in>>a;
if(a==1){
in>>v[++n];
adauga(n);
}
if(a==2)
{
int p;
in>>p;
sterge(poz[p]);
}
if(a==3)
{
out<<v[h[1]]<<"\n";
}
}
return 0;
}