Pagini recente » Cod sursa (job #38628) | Cod sursa (job #2703151) | Cod sursa (job #2665909) | Cod sursa (job #2087230) | Cod sursa (job #2438554)
#include <bits/stdc++.h>
#define NM 4*200005
using namespace std;
ifstream fin ("heapuri.in");
ofstream fout ("heapuri.out");
int NR_OP, op, n, x, v[NM];
int b[NM/4];///pt poz ord
vector<int> a;///pt ord poz
void op_1(int x)
{
++n;
v[n] = x;
int cur = n;
a.push_back(cur);
b[cur] = a.size()-1;
while(cur > 1 && v[cur] < v[cur/2])
{
swap(a[b[cur]], a[b[cur/2]]);
swap(b[cur], b[cur/2]);
swap(v[cur], v[cur/2]);
cur = cur/2;
}
}
void op_2(int x)
{
v[a[x-1]] = v[n];
--n;
int cur = a[x-1];
swap(a[x-1], a[b[n]]);
swap(b[a[x-1]], b[n]);
while(cur <= n/2 && (v[cur] > v[cur*2] || v[cur] > v[cur*2+1]))
{
if(v[cur*2] < v[cur*2+1])
{
swap(a[b[cur]], a[b[cur*2]]);
swap(b[cur], b[cur*2]);
swap(v[cur], v[cur*2]);
cur = cur*2;
}
else
{
swap(a[b[cur]], a[b[cur*2+1]]);
swap(b[cur], b[cur*2+1]);
swap(v[cur], v[cur*2+1]);
cur = cur*2+1;
}
}
}
int main()
{
fin >> NR_OP;
for(;NR_OP--;)
{
fin >> op;
if(op!=3)
fin >> x;
if(op == 1)
op_1(x);
else if(op == 2)
op_2(x);
else fout << v[1] << '\n';
}
return 0;
}