Pagini recente » Cod sursa (job #362875) | Cod sursa (job #2817977) | Cod sursa (job #1238174) | Cod sursa (job #1339906) | Cod sursa (job #2416417)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
int heap[MAXN], pos[MAXN];
int len, cnt;
void heapsus(int p){
if(p < 1 && heap[p] < heap[p / 2]){
swap(heap[p], heap[p / 2]);
swap(pos[p], pos[p / 2]);
heapsus(p / 2);
}
}
void heapjos(int p){
int f1 = 2 * p, f2 = 2 * p + 1, np = p;
if(f1 <= len && heap[p] > heap[f1]) np = f1;
if(f2 <= len && heap[p] > heap[f2]) np = f2;
if(np != p){
swap(heap[p], heap[np]);
swap(pos[p], pos[np]);
heapjos(np);
}
}
void add(int x){
heap[++len] = x;
pos[len] = ++cnt;
heapsus(len);
}
void del(int x){
int p = 0;
for(int i = 1; i <= len; ++i)
if(pos[i] == x)
p = i;
swap(heap[p], heap[len]);
len--;
heapjos(p);
heapsus(p);
}
int main()
{
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n;
fin >> n;
for(int i = 1; i <= n; ++i){
int op, x;
fin >> op;
if(op < 3) fin >> x;
if(op == 1) add(x);
else if(op == 2) del(x);
else fout << heap[1] << "\n";
}
return 0;
}