Pagini recente » Cod sursa (job #3183914) | Cod sursa (job #660968) | Cod sursa (job #2584160) | Cod sursa (job #2917321) | Cod sursa (job #2580667)
#include <bits/stdc++.h>
using namespace std;
int n,heap[1003],poz,stiv[100005],m;
int st (int nr) {
return (nr<<1);
}
int dr (int nr) {
return ((nr<<1)^1);
}
int tata (int nr) {
return (nr>>1);
}
void reconstituie_heap (int i) {
int maxim=i;
if(st(i)<=n && heap[st(i)]<heap[maxim])
maxim=st(i);
if(dr(i)<=n && heap[dr(i)]<heap[maxim])
maxim=dr(i);
if(maxim!=i) {
swap(heap[i],heap[maxim]);
reconstituie_heap(maxim);
}
}
int insert_heap (int nr) {
heap[++n]=nr;poz=n;
while(poz>1 && heap[tata(poz)]>heap[n])
poz=tata(poz);
heap[poz]=nr;
return poz;
}
int minim () {
return heap[1];
}
void delete_heap (int nod) {
swap(heap[nod],heap[n]);--n;
reconstituie_heap(nod);
}
int main () {
int q, nr;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d", &m);++m;
while(--m) {
/*printf("%d : ", m);
for(int i=1;i<=n;++i)
printf("%d ", heap[i]);
printf("\n");*/
scanf("%d", &q);
if(q==1) {
scanf("%d", &nr);
stiv[++stiv[0]]=insert_heap(nr);
}
else if (q==2) {
scanf("%d", &nr);
delete_heap(stiv[nr]);
}
else
printf("%d\n", minim());
}
return 0;
}