Pagini recente » Cod sursa (job #46414) | Cod sursa (job #292713) | Cod sursa (job #2087268) | Cod sursa (job #2713613) | Cod sursa (job #2445557)
#include <bits/stdc++.h>
#define max 200002
#define inf (1 << 30)
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int tree[max];
bool poz[max];
vector <int> v(0, max);
void insert(int x, int nod, const int id)
{
if (nod == 1)
tree[1] = id;
else if (nod && x < v[tree[nod / 2]])
{
swap(tree[nod / 2], tree[nod]);
insert(x, nod / 2, id);
}
}
int find_min(int nod, const int n)
{
if (poz[tree[nod]] == 0)
return v[tree[nod]];
int ans = inf;
if (nod * 2 <= n)
ans = min(ans, find_min(nod * 2, n));
if (nod * 2 + 1 <= n)
ans = min(ans, find_min(nod * 2 + 1, n));
return ans;
}
int main()
{
int q;
f >> q;
while (q --)
{
int op, x;
f >> op;
if (op == 3)
g << find_min(1, v.size()) << '\n';
else
{
f >> x;
if (op == 2)
poz[x - 1] = 1;
else
{
v.push_back(x);
tree[v.size()] = v.size() - 1;
insert(x, v.size(), v.size() - 1);
}
}
}
}