Pagini recente » Cod sursa (job #1549145) | Cod sursa (job #183838) | Cod sursa (job #409863) | Cod sursa (job #772691) | Cod sursa (job #2492046)
#include <fstream>
#include <vector>
using namespace std;
vector<pair<int, int>> heap;
void swap(int i, int j){
pair<int, int> aux = heap[i];
heap[i] = heap[j];
heap[j] = aux;
}
void inserth(int x, int co){
heap.push_back({x, co});
int k = heap.size()-1;
while(k){
if(heap[(k-1)>>1].first>heap[k].first){
swap(k, (k - 1) >> 1);
k--;
k>>=1;
}else break;
}
}
void deleteh(int x){
int k;
for(k=0;k<heap.size();k++)
if(heap[k].second==x-1)
break;
swap(k, heap.size()-1);
heap.pop_back();
if(heap[k].first<heap[(k-1)>>1].first){
while(heap[k].first<heap[(k-1)>>1].first){
swap(k, (k-1)>>1);
k--;
k>>=1;
}
}else{
while(1){
int mini = heap[k].first, minip = k;
if((k<<1)+1>=heap.size()) break;
if(heap[(k<<1)+1].first<mini){
mini = heap[(k<<1)+1].first;
minip = (k<<1)+1;
}
if((k<<1)+2<heap.size() && heap[(k<<1)+2].first<mini){
mini = heap[(k<<1)+2].first;
minip = (k<<1)+2;
}
if(minip==k) break;
swap(k, minip);
k = minip;
}
}
}
int main() {
ifstream cin("heapuri.in");
ofstream cout("heapuri.out");
int n, op, x, co = 0;
cin>>n;
for(int i=0;i<n;i++){
cin>>op;
if(op==1){
cin>>x;
inserth(x, co++);
}else if(op==2){
cin>>x;
deleteh(x);
}else
cout<<heap.front().first<<'\n';
}
return 0;
}