Pagini recente » Cod sursa (job #2456127) | Cod sursa (job #865726) | Cod sursa (job #2428490) | Cod sursa (job #808893) | Cod sursa (job #1329273)
#include<cstdio>
int n,op,c,p,aa,ok,b,a,nr,i,j,dh,v[200100],h[200100],poz[200100];
FILE *f,*g;
void chg(int &a,int &b){
int aux=a;
a=b;
b=aux;
}
void heapins(int a){
c=a;
p=a/2;
while(p>=1){
if(v[h[c]]<v[h[p]]){
chg(poz[ h[c] ], poz[ h[p] ] );
chg(h[c],h[p]);
c=p;
p/=2;
}
else
break;
}
}
void heapd(){
p=1;
c=2;
while(c<=dh){
if(v[ h[c] ]>v[ h[c+1] ]&&c+1<=dh)
c++;
if(v[ h[c] ]<v[ h[p] ]){
chg(poz[ h[c] ], poz[ h[p] ] );
chg(h[c],h[p]);
p=c;
c*=2;
}
else
break;
}
}
int main(){
f=fopen("heapuri.in","r");
g=fopen("heapuri.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++){
fscanf(f,"%d",&op);
if(op==3){
fprintf(g,"%d\n",v[h[1]]);
}
if(op==1){
fscanf(f,"%d",&v[++nr]);
dh++;
poz[nr]=dh;
h[dh]=nr;
heapins(dh);
}
if(op==2){
fscanf(f,"%d",&a);
//a=v[a];
a=poz[a];
chg(h[a],h[dh]);
chg(poz[ h[a] ], poz[ h[dh] ] );
poz[h[dh]]=200000;
dh--;
aa=h[a];
b=v[ h[a] ];
v[ h[a]] =-1;
heapins(poz[ h[a] ]);
v[ aa ]=b;
heapd();
}
}
fclose(f);
fclose(g);
return 0;
}