Pagini recente » Cod sursa (job #2468645) | Cod sursa (job #2797890) | Cod sursa (job #1444963) | Cod sursa (job #238766)
Cod sursa(job #238766)
#include<fstream>
#define MAXN 200009
using namespace std;
int ha[MAXN],hsize;
int poz[MAXN];
int ipoz[MAXN];
int n;
int c;
void insereaza(int x){
hsize++;
int p=hsize;
ha[p]=x;
poz[c]=hsize;
ipoz[hsize]=c;
while(ha[(p>>1)]>ha[p]){
swap(ha[(p>>1)],ha[p]);
swap(poz[ipoz[p]],poz[ipoz[p/2]]);
swap(ipoz[p],ipoz[p/2]);
p>>=1;
}
}
void hf(int i){
int minim,imin=-1;
if(2*i<=hsize&&ha[2*i]<ha[i])
minim=ha[2*i],imin=2*i;
else minim=ha[i],imin=i;
if(2*i+1<=hsize&&ha[2*i+1]<minim)
minim=ha[2*i+1],imin=2*i+1;
swap(ha[i],ha[imin]);
swap(poz[ipoz[i]],poz[ipoz[imin]]);
swap(ipoz[i], ipoz[imin]);
if(imin!=i) hf(imin);
}
void extrmin(){
ha[1]=ha[hsize];
poz[ipoz[hsize]]=1;
poz[ipoz[1]]=0;
ipoz[1]=ipoz[hsize];
ipoz[hsize]=0;
hsize--;
hf(1);
}
void sterge(int x){
int p=poz[x];
ha[p]=-1000000009;
while(ha[(p>>1)]>ha[p]){
swap(ha[(p>>1)],ha[p]);
swap(poz[ipoz[p]],poz[ipoz[(p>>1)]]);
swap(ipoz[p],ipoz[(p>>1)]);
p>>=1;
}
extrmin();
}
int main(){
ha[0]=-2000000000;
int i, cod, x;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
f>>n;
for(i=0;i<n;i++){
f>>cod;
if(cod==3) g<<ha[1]<<'\n';
else{
f>>x;
c++;
if(cod==1){
insereaza(x);
}
else sterge(x);
}
}
f.close();
g.close();
return 0;
}