Pagini recente » Cod sursa (job #3243892) | Cod sursa (job #2486222) | Cod sursa (job #2472767) | Cod sursa (job #204327) | Cod sursa (job #1346644)
#include<fstream>
using namespace std;
struct pereche
{
int poz,val;
};
pereche heap[200002],v[200002];
int n,a,c,x,nrelem,i,vmin;
void adaug(int c,int x,int &i)
{
nrelem++;
// urcarea
i=nrelem;
while(i/2>0 && heap[i/2].val>x)
{
heap[i]=heap[i/2];
v[heap[i/2].poz].poz=i;
i=i/2;
}
heap[i].poz=c;
heap[i].val=x;
}
void sterg(int x)
{
int p,pmin,vmin;
p=v[x].poz;
while(p*2<=nrelem-1)
{
vmin=heap[p*2].val;
pmin=2*p;
if(2*p+1<=nrelem-1 && heap[2*p+1].val<vmin)
{
vmin=heap[2*p+1].val;
pmin=2*p+1;
}
if(vmin<heap[nrelem].val)
{
heap[p]=heap[pmin];
v[heap[p].poz].poz=pmin;
p=pmin;
}
else
{
heap[p]=heap[nrelem];
v[heap[p].poz].poz=p;
nrelem--;
break;
}
}
}
int minim()
{
return heap[1].val;
}
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,x,v[c].poz);
}
if(a==2)
{
fin>>x;
sterg(x);
}
if(a==3)
{
vmin=minim();
fout<<vmin<<endl;
}
}
fin.close();
fout.close();
return 0;
}