Pagini recente » Cod sursa (job #660053) | Cod sursa (job #501946) | Cod sursa (job #1092106) | Cod sursa (job #2440970) | Cod sursa (job #2103650)
#include <iostream>
#include <cstdio>
#include <vector>
#define def 1000000001
using namespace std;
vector <int> h(200000);
int n,ord[200000];
void up(int x){
int tata=x/2;
if(tata!=0 && h[x]<h[tata]){
swap(ord[x],ord[tata]);
swap(h[x],h[tata]);
up(tata);
}
}
void down(int x){
int l=2*x, r=2*x+1, minim=def, poz;
if(l<=n)
minim=h[l], poz=l;
if(r<=n && h[r]<minim){
minim=h[r];
poz=r;
}
if(minim!=def && h[x]>minim){
swap(h[x],h[poz]);
swap(ord[x],ord[poz]);
down(poz);
}
}
int main()
{
FILE *fin, *fout;
int op,x,m,i;
fin=fopen("heapuri.in","r");
fout=fopen("heapuri.out","w");
fscanf(fin,"%d",&m);
n=0;
while(m){
fscanf(fin,"%d",&op);
if(op==3){
fprintf(fout,"%d\n",h[1]);
}
else{
fscanf(fin," %d",&x);
if(op==1){
h[++n]=x;
ord[n]=n;
up(n);
}
else{
for(i=1;ord[i]!=x;i++);
x=i;
h[x]=h[n];
ord[x]=ord[n];
h[n]=def;
n--;
down(x);
}
}
fscanf(fin,"\n");
m--;
}
fclose(fin);
fclose(fout);
return 0;
}