Pagini recente » Cod sursa (job #623975) | Cod sursa (job #1444768) | Cod sursa (job #1483263) | Cod sursa (job #2352356) | Cod sursa (job #1354740)
#include<fstream>
using namespace std;
int v[200002], pv[200009];
int H[200002], pH, q, nH;
int n,a,c,x,i;
inline void adaug(int poz)
{
int i,p,x;
x=v[poz];
nH++;
// urcarea
i=nH;
p=i/2;
pH=H[p];
while(p && v[pH]>x)
{
H[i]=pH;
pv[pH]=i;
i=p;
p=i/2;
}
H[i]=poz;
pv[poz]=i;
}
inline void sterg(int poz)
{
int p,i;
q=H[nH];
nH--;
p=pv[poz];
while(2*p<=nH)
{
i=2*p;
pH=H[i];
if(i+1<=nH && v[H[i+1]]<v[pH])
{
pH=H[i+1];
i++;
}
if(v[pH]<v[q])
{
H[p]=pH;
pv[pH]=p;
p=i;
}
else break;
}
H[p]=q;
pv[q]=p;
}
int main()
{
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
fin>>n;
c=0;
nH=0;
for(i=1;i<=n;i++)
{
fin>>a;
if(a==1)
{
fin>>x;
c++;
v[c]=x;
adaug(c);
}else
if(a==2)
{
fin>>x;
sterg(x);
}else
{
fout<<v[H[1]]<<endl;
}
}
fin.close();
fout.close();
return 0;
}