Pagini recente » Cod sursa (job #976248) | Cod sursa (job #1141886) | Cod sursa (job #410302) | Cod sursa (job #575741) | Cod sursa (job #1681910)
# include <fstream>
# define DIM 200010
# define f first
# define s second
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
pair <int,int> v[DIM],x;
int pz[DIM],n,i,k,nr,val,h;
void add (pair <int,int> x){
v[++k]=x;
pz[v[k].s]=k;
int p=k/2,c=k;
while(p!=0){
if(v[c].f<v[p].f){
pz[v[c].s]=p;
pz[v[p].s]=c;
swap(v[c],v[p]);
c=p;
p/=2;
}
else
break;
}
}
void off(int poz){
pz[v[k].s]=poz;
v[poz]=v[k--];
int p=poz/2,c=poz;
while(p!=0){
if(v[c].f<v[p].f){
pz[v[c].s]=p;
pz[v[p].s]=c;
swap(v[c],v[p]);
c=p;
p/=2;
}
else
break;
}
p=poz;
c=2*poz;
while(c<=k){
if(v[c].f>v[c+1].f&&c<k)
c++;
if(v[c].f<v[p].f){
swap(v[c],v[p]);
p=c;
c*=2;
}
else
break;
}
}
int main () {
fin>>n;
for(i=1;i<=n;i++){
fin>>val;
if(val==1){
nr++;
fin>>x.f;
x.s=nr;
add(x);
}
if(val==2){
fin>>h;
off(pz[h]);
}
if(val==3)
fout<<v[1].f<<"\n";
}
return 0;
}