Pagini recente » Cod sursa (job #2264059) | Cod sursa (job #2650729) | Cod sursa (job #186858) | Cod sursa (job #2504477) | Cod sursa (job #2893697)
#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=0, aux[nrmax];
void heapify(int heap[], int n, int i){
int parinte = (i-1) /2;
if(heap[parinte] > 0){
if(heap[i]<heap[parinte]){
//poz[ord] = parinte;
swap(poz[ord], poz[aux[parinte]]);
swap(heap[i], heap[parinte]);
//ord = aux[parinte];
swap(aux[i], aux[parinte]);
heapify(heap, n, parinte);
}
}
}
void heapifyTop(int heap[], int n, 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(heap, n, mx);
}
}
void inserare(int heap[], int &n, int elem){
ord++;
n++;
heap[n-1] = elem;
poz[ord] = n-1;
aux[n-1] = ord;
heapify(heap, n, n-1);
}
void stergere(int heap[], int &n, int k){
int s1 = poz[k];
swap(heap[poz[k]], heap[n-1]);
swap(poz[k] ,poz[aux[n-1]]);
swap(aux[s1], aux[n-1]);
n--;
heapifyTop(heap, n, 0);
}
int main()
{
int heap[nrmax];
int n = 0;
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(heap, n, val);
}
if(op==2)
{
is>>val;
stergere(heap, n, val);
}
if(op==3)
os<<heap[0]<<endl;
}
return 0;
}