Pagini recente » Cod sursa (job #2882056) | Cod sursa (job #2874296) | Cod sursa (job #2534574) | Cod sursa (job #1664604) | Cod sursa (job #1004761)
#include<fstream>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
int heap[200200],val[200200],poz[200200],nr,lungime;
void up(int nod) {
while(nod/2 && val[heap[nod]]<val[heap[nod/2]]) {
swap(heap[nod],heap[nod/2]);
poz[heap[nod]]=nod;
poz[heap[nod/2]]=nod/2;
nod=nod/2;
}
}
void down(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() {
int n, i, x, y;
in>>n;
for(i=1;i<=n;i++) {
in>>x;
if(x==1) {
in>>y;
nr++;
lungime++;
val[nr]=y;
heap[lungime]=nr;
poz[nr]=lungime;
up(lungime);
}
if(x==2) {
in>>y;
val[y]=-1;
up(poz[y]);
poz[heap[1]]=0;
heap[1]=heap[lungime--];
poz[heap[1]]=1;
down(1);
}
if(x==3)
out<<val[heap[1]]<<'\n';
}
in.close();
out.close();
return 0;
}