Pagini recente » Cod sursa (job #2718372) | Cod sursa (job #1973422) | Cod sursa (job #1237477) | Cod sursa (job #1043553) | Cod sursa (job #2672738)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
vector <int> order,heap;
int whereheap[200005];
void insert(int &x)
{
heap.push_back(x);
int n = heap.size()-1;
while(heap[n] < heap[n/2] and n != 0) {
swap(heap[n], heap[n / 2]);
swap(whereheap[n], whereheap[n / 2]);
n /= 2;
}
}
void del(int &x)
{
int ord = whereheap[order[x - 1]];
int n = heap.size() - 1;
swap(heap[ord],heap[n]);
swap(whereheap[ord], whereheap[n]);
heap[n] = 0;
if(ord == 0)
ord += 2;
else
ord *= 2;
while(ord < heap.size() - 1) {
if (heap[ord] > heap[ord + 1])
{
swap(heap[ord], heap[ord / 2]);
swap(whereheap[ord], whereheap[ord / 2]);
}
else
{
swap(heap[ord + 1], heap[ord / 2]);
swap(whereheap[ord + 1], whereheap[ord / 2]);
ord += 1;
}
ord *= 2;
}
}
int main() {
heap.push_back(0);
int n;
fin >> n;
while(n--)
{
int op;
fin >> op;
if(op == 1)
{
int x;
fin >> x;
order.push_back(x);
whereheap[x] = heap.size() - 1;
insert(x);
}
if(op == 2)
{
int x;
fin >> x;
del(x);
for(int i = x + 1;i < order.size(); ++i)
order[i - 1] = order[i];
}
if(op == 3)
{
fout << heap[1] << "\n";
}
}
return 0;
}