Pagini recente » Cod sursa (job #1731351) | Cod sursa (job #1580184) | Cod sursa (job #3174798) | Cod sursa (job #1925314) | Cod sursa (job #1362840)
#include<cstdio>
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)
{
vmin=heap[p*2].val;
pmin=2*p;
if(2*p+1<=nrelem && 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()
{
FILE *fin,*fout;
fin=fopen("heapuri.in","r");
fout=fopen("heapuri.out","w");
fscanf(fin,"%d",&n);
c=0;
nrelem=0;
for(i=1;i<=n;i++)
{
fscanf(fin,"%d",&a);
if(a==1)
{
fscanf(fin,"%d",&x);
c++;
v[c].val=x;
adaug(c,x,v[c].poz);
}
if(a==2)
{
fscanf(fin,"%d",&x);
sterg(x);
}
if(a==3)
{
vmin=minim();
fprintf(fout,"%d\n",vmin);
}
}
fclose(fin);
fclose(fout);
return 0;
}