Pagini recente » Cod sursa (job #1023024) | Cod sursa (job #1752069) | Cod sursa (job #689956) | Cod sursa (job #884356) | Cod sursa (job #1166171)
#include<fstream>
using namespace std;
int heap[200200],val[200200],poz[200200],Nr,lungime;
void up_heap(int nod) {
while( nod/2 && (val[heap[nod/2]]>val[heap[nod]]) ) {
swap(heap[nod],heap[nod/2]);
poz[heap[nod]]=nod;
poz[heap[nod/2]]=nod/2;
nod/=2;
}
}
void down_heap(int nod) {
int k=0;
while(nod!=k) {
k=nod;
if(2*k<=lungime && val[heap[nod]]>val[heap[2*k]])
nod=2*k;
if(2*k+1<=lungime && val[heap[nod]]>val[heap[2*k+1]])
nod=2*k+1;
swap(heap[nod],heap[k]);
poz[heap[nod]]=nod;
poz[heap[k]]=k;
}
}
int main() {
ifstream in("heapuri.in");
ofstream out("heapuri.out");
int N,tip,x,i;
in>>N;
for(i=1;i<=N;i++) {
in>>tip;
if(tip==3)
out<<val[heap[1]]<<'\n';
if(tip==1){
in>>x;
val[++Nr]=x;
heap[++lungime]=Nr;
poz[Nr]=lungime;
up_heap(lungime);
}
if(tip==2) {
in>>x;
val[x]=-1;
up_heap(poz[x]);
poz[heap[1]]=0;
heap[1]=heap[lungime--];
poz[heap[1]]=1;
down_heap(1);
}
}
in.close();
out.close();
return 0;
}