Pagini recente » Cod sursa (job #1322751) | Cod sursa (job #2810306) | Cod sursa (job #2130964) | Cod sursa (job #828589) | Cod sursa (job #553006)
Cod sursa(job #553006)
#include<fstream>
#define nmax 200010
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,l,nr,c,z;
int hp[nmax],poz[nmax],a[nmax];
void upheap(int nod){
int aux;
while(a[hp[nod]]<a[hp[nod/2]]){
aux=hp[nod];
hp[nod]=hp[nod/2];
hp[nod/2]=aux;
poz[hp[nod/2]]=nod/2;
poz[hp[nod]]=nod;
nod/=2;
}
}
void downheap(int nod){
int aux;
if(2*nod<=l&&a[hp[nod]]>a[hp[2*nod]]) aux=hp[nod],hp[nod]=hp[2*nod],hp[2*nod]=aux,poz[hp[nod]]=nod,poz[hp[2*nod]]=2*nod,downheap(2*nod);
if(2*nod+1<=l&&a[hp[nod]]>a[hp[2*nod+1]]) aux=hp[nod],hp[nod]=hp[2*nod+1],hp[2*nod+1]=aux,poz[hp[nod]]=nod,poz[hp[2*nod+1]]=2*nod+1,downheap(2*nod+1);
}
int main(){
f>>n;
for(int i=1;i<=n;i++){
f>>c;
if(c==1){
l++,nr++;
f>>z;
a[nr]=z;
hp[l]=nr;
poz[nr]=l;
upheap(l);
}
if(c==2){
f>>z;
a[z]=-1;
upheap(poz[z]);
poz[hp[1]]=0;
hp[1]=hp[l--];
poz[hp[1]]=1;
downheap(1);
}
if(c==3)
g<<a[hp[1]]<<'\n';
}
g.close();
return 0;
}