Pagini recente » Cod sursa (job #1611985) | Cod sursa (job #3241831) | Cod sursa (job #1363766) | Cod sursa (job #2322668) | Cod sursa (job #2893774)
#include <iostream>
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream is("heapuri.in");
ofstream os("heapuri.out");
#define nrmax 200020
int poz[nrmax], ord, aux[nrmax], heap[nrmax], n;
void heapify( int i){
//int parinte = (i-1) /2;
if(heap[(i-1) /2] > 0){
if(heap[i]<heap[(i-1) /2]){
//poz[ord] = parinte;
swap(poz[ord], poz[aux[(i-1) /2]]);
swap(heap[i], heap[(i-1) /2]);
//ord = aux[parinte];
swap(aux[i], aux[(i-1) /2]);
heapify((i-1) /2);
}
}
}
void heapifyTop(int i){
int mx = i;
int left = 2 * mx + 1;
int right = 2 * mx + 2;
if(left<n && heap[left] < heap[mx])
mx = left;
if(right<n && heap[right]<heap[mx])
mx = right;
if(mx != i){
swap(poz[aux[i]], poz[aux[mx]]);
swap(heap[i], heap[mx]);
swap(aux[i], aux[mx]);
heapifyTop(mx);
}
}
void inserare(int elem){
ord++;
n++;
heap[n-1] = elem;
poz[ord] = n-1;
aux[n-1] = ord;
heapify(n-1);
}
void stergere(int k){
int s1 = poz[k];
heap[poz[k]] = heap[n-1];
//swap(poz[k] ,poz[aux[n-1]]);
//swap(aux[s1], aux[n-1]);
n--;
heapifyTop(0);
}
int main()
{
int nr_op=0;
is>>nr_op;
int op, val;
for(int i =0; i<nr_op;i++){
is>>op;
//cout<<endl<<op<<" "<<val;
if(op==1)
{
is>>val;
inserare(val);
}
if(op==2)
{
is>>val;
stergere(val);
}
if(op==3)
os<<heap[0]<<endl;
}
return 0;
}