Pagini recente » Cod sursa (job #976422) | Cod sursa (job #2440926) | Cod sursa (job #1923923) | Cod sursa (job #368580) | Cod sursa (job #2887494)
#include<fstream>
using namespace std;
int heap[200005], cronologic[200005], pozitii[200005];
int backHeap=1;
int n;
void inserare(int x){
heap[backHeap]=x;
int poz=backHeap;
pozitii[x]=backHeap;
backHeap++;
while(poz!=1 && heap[poz]<heap[poz/2]){
pozitii[heap[poz]]=poz/2;
pozitii[heap[poz/2]]=poz;
swap(heap[poz], heap[poz/2]);
poz/=2;
}
}
void stergeRoot(){
backHeap--;
pozitii[heap[1]]=backHeap;
pozitii[heap[backHeap]]=1;
swap(heap[1], heap[backHeap]);
int poz=1;
while(1){
if(2*poz>=backHeap)
break;
if(2*poz+1>=backHeap){
if(heap[poz]>heap[2*poz]){
pozitii[heap[poz]]=poz*2;
pozitii[heap[poz*2]]=poz;
swap(heap[poz], heap[2*poz]);
}
break;
}
if(heap[2*poz]<heap[2*poz+1]){
if(heap[poz]<heap[2*poz])
break;
pozitii[heap[poz]]=poz*2;
pozitii[heap[poz*2]]=poz;
swap(heap[poz], heap[2*poz]);
poz*=2;
}
else{
if(heap[poz]<heap[2*poz+1])
break;
pozitii[heap[poz]]=poz*2+1;
pozitii[heap[poz*2+1]]=poz;
swap(heap[poz], heap[2*poz+1]);
poz=2*poz+1;
}
}
}
void stergere(int x){
int poz=pozitii[x];
while(poz!=1){
pozitii[heap[poz]]=poz/2;
pozitii[heap[poz/2]]=poz;
swap(heap[poz], heap[poz/2]);
poz/=2;
}
stergeRoot();
}
int main() {
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
fin>>n;
int optiune;
int contor=1;
for(int i=0;i<n;i++){
fin>>optiune;
//inserare
if(optiune==1){
int x;
fin>>x;
inserare(x);
cronologic[contor++]=x;
}
//stergere
else if(optiune==2){
int poz;
fin>>poz;
stergere(cronologic[poz]);
}
//minim
else{
fout<<heap[1]<<"\n";
}
}
fout.close();
fin.close();
return 0;
}