Pagini recente » Cod sursa (job #2340508) | Cod sursa (job #587208) | Cod sursa (job #102923) | Cod sursa (job #1676348) | Cod sursa (job #1354712)
#include<fstream>
using namespace std;
struct pereche
{
int poz,val;
};
pereche heap[200002],v[200002],pH,q;
int n,a,c,x,nrelem,i,vmin;
inline void adaug(int poz)
{
int i,p,x;
x=v[poz].val;
nrelem++;
// urcarea
i=nrelem;
p=i/2;
pH=heap[p];
while(p && pH.val>x)
{
heap[i]=pH;
v[pH.poz].poz=i;
i=p;
p=i/2;
}
heap[i].poz=poz;
heap[i].val=x;
v[poz].poz=i;
}
inline void sterg(int poz)
{
int p,i;
q=heap[nrelem];
nrelem--;
p=v[poz].poz;
while(2*p<=nrelem)
{
i=2*p;
pH=heap[i];
if(i+1<=nrelem && heap[i+1].val<pH.val)
{
pH=heap[i+1];
i++;
}
if(pH.val<q.val)
{
heap[p]=pH;
v[pH.poz].poz=p;
p=i;
}
else break;
}
heap[p]=q;
v[q.poz].poz=p;
}
int main()
{
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
fin>>n;
c=0;
nrelem=0;
for(i=1;i<=n;i++)
{
fin>>a;
if(a==1)
{
fin>>x;
c++;
v[c].val=x;
adaug(c);
}else
if(a==2)
{
fin>>x;
sterg(x);
}else
{
vmin=heap[1].val;
fout<<vmin<<endl;
}
}
fin.close();
fout.close();
return 0;
}