Pagini recente » Cod sursa (job #2495734) | Cod sursa (job #615692) | Cod sursa (job #2115824) | Cod sursa (job #3165140) | Cod sursa (job #380514)
Cod sursa(job #380514)
#include<fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int a[200001],n,i,maxim,p,t,j,x,y,nr,poz[200001],w,k;
int v[200001];
void combheap(int i, int u){
int s,d;
while(2*i<=u)
{ maxim=a[i];
s=2*i;
d=2*i+1;
if(maxim>a[s])
{ maxim=a[s];
p=s;
}
if(maxim>a[d] && d<=u)
{ maxim=a[d];
p=d;
}
if(maxim!=a[i]){
t=a[i];
a[i]=maxim;
a[p]=t;
poz[v[i]]=p;
poz[v[p]]=i;
t=v[i];
v[i]=v[p];
v[p]=t;
i=p;
}
else
break;
}
}
int main(){
f>>n;
nr=0;
w=0;
for(i=1;i<=n;i++)
{ f>>x;
if(x==1||x==2)
f>>y;
if(x==1){
nr++;w++;
k=nr;
while(k>1&&y<a[k/2]){
a[k]=a[k/2];
poz[v[k/2]]=k;
v[k]=v[k/2];
k=k/2;
}
a[k]=y;
v[k]=nr;
poz[nr]=k;
}
else
if(x==2)
{ a[poz[y]]=a[w];
w--;
combheap(poz[y],w);
}
else if(x==3)
g<<a[1]<<'\n';
}
/*
for(i=n/2;i>0;i--)
combheap(i,n);
for(i=1;i<=n;i++)
{ t=a[1];
a[1]=a[n-i+1];
a[n-i+1]=t;
combheap(1,n-i);
}
for(i=1;i<=n;i++)
g<<a[i]<<" ";
*/
return 0;
}