Pagini recente » Cod sursa (job #70386) | Cod sursa (job #619100) | Cod sursa (job #1512483) | Cod sursa (job #1803150) | Cod sursa (job #1898381)
#include <iostream>
#include <fstream>
using namespace std;
int n,lg=0,v[200001]={0},poz[200001]={0},p=0;
void add(int a)
{
v[lg]=a;
poz[lg]=p;
int f=lg;
while (v[f]<v[f/2])
{
swap(v[f],v[f/2]);
swap(poz[f],poz[f/2]);
f/=2;
}
}
void ster(int a)
{
int f;
for(int j=1;j<=lg;j++)
if(poz[j]==a){f=j;break;}
v[f]=v[lg];
v[lg]=0;
poz[f]=poz[lg];
poz[lg]=0;
lg--;
while((v[f]>v[2*f] && 2*f<=lg) || (2*f+1<=lg && v[f]>v[2*f+1]))
{
if(v[f]>v[2*f+1] && 2*f+1<=lg){
swap(v[f],v[2*f+1]);
swap(poz[f],poz[2*f+1]);
f=2*f+1;
}
else
{
swap(v[f],v[2*f]);
swap(poz[f],poz[2*f]);
f=2*f;
}
}
}
int main()
{
ifstream f("heapuri.in");
ofstream g("heap.out");
f>>n;
int cod,x;
for(int i=1;i<=n;i++)
{
f>>cod;
if(cod==1)
{
f>>x;
lg++;
p++;
add(x);
}
else if(cod==2)
{
f>>x;
ster(x);
}
else {
g<<v[1]<<'\n';
}
}
}