Pagini recente » Cod sursa (job #1620174) | Cod sursa (job #1753293) | Cod sursa (job #2692543) | Cod sursa (job #3120691) | Cod sursa (job #2572831)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
struct heap{
int val,ind;
}h[300001];
int k,poz[300001];
void upheap(int nod){
int tata=nod/2;
if(tata>0){
if(h[nod].val<h[tata].val){
poz[h[nod].ind]=tata;
poz[h[tata].ind]=nod;
swap(h[nod],h[tata]);
upheap(tata);
}
}
}
void downheap(int nod)
{
int fius=2*nod;
int fiud=fius+1;
int fiu_min=fius;
if (fiud<=k){
if(h[fiud].val<h[fius].val)fiu_min++;
}
if(fiu_min<=k&&h[nod].val>h[fiu_min].val){
poz[h[fiu_min].ind]=nod;
poz[h[nod].ind]=fiu_min;
swap(h[fiu_min],h[nod]);
downheap(fiu_min);
}
}
void sterge(int x){
int pozh=poz[x];
poz[h[k].ind]=pozh;
poz[h[pozh].ind]=k;
swap(h[pozh],h[k]);
k--;
downheap(pozh);
}
void insereaza(int valoare){
k++;
h[k].val=valoare;
h[k].ind=k;
poz[k]=k;
upheap(k);
}
int main()
{
int nr;
in>>nr;
for(int i=1;i<=nr;i++){
int q;
in>>q;
if(q==1){
int x;
in>>x;
insereaza(x);
}
if(q==2){
int px;
in>>px;
sterge(px);
}
if(q==3)
out<<h[1].val<<'\n';
}
return 0;
}