Pagini recente » Cod sursa (job #1566282) | Cod sursa (job #602646) | Cod sursa (job #2865158) | Cod sursa (job #2069449) | Cod sursa (job #303980)
Cod sursa(job #303980)
#include <iostream>
#include <algorithm>
#define FIN "heapuri.in"
#define FOUT "heapuri.out"
#define MAX 200010
using namespace std;
int poz[MAX],heap[MAX],v[MAX];
int N,dheap;
void heap_up(int nod){
int dad=nod/2;
if (dad==0) return ;
if (v[heap[dad]]>v[heap[nod]]){
int aux=heap[dad];
heap[dad]=heap[nod];
heap[nod]=aux;
poz[heap[dad]]=dad;
poz[heap[nod]]=nod;
heap_up(dad);
}
}
void heap_dw(int nod){
int st=nod*2,dr=st+1;
int mini=nod;
if (st<=dheap && v[heap[st]]<v[heap[mini]]) mini=st;
if (dr<=dheap && v[heap[dr]]<v[heap[mini]]) mini=dr;
if (mini!=nod){
int aux=heap[nod];
heap[nod]=heap[mini];
heap[mini]=aux;
poz[heap[nod]]=nod;
poz[heap[mini]]=mini;
heap_dw(mini);
}
}
int main(void){
freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);
scanf("%d",&N);
dheap=0;
int nel=0;
int x,y;
for (int i=1;i<=N;++i){
scanf("%d",&x);
if (x==3){ printf("%d\n",v[heap[1]]);} else
{
scanf("%d",&y);
if (x==1){
++nel;
v[nel]=y;
heap[++dheap]=nel;
poz[nel]=dheap;
heap_up(dheap);
} else {
int aux=heap[poz[y]];
heap[poz[y]]=heap[dheap];
heap[dheap]=heap[poz[y]];
poz[heap[poz[y]]]=poz[y];
--dheap;
heap_dw(poz[y]);
}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}