Pagini recente » Cod sursa (job #1071458) | Cod sursa (job #2036998) | Cod sursa (job #3275744) | Cod sursa (job #1384813) | Cod sursa (job #2438577)
#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 schimb(int p1, int p2)
{
swap(b[p1], b[p2]);
a[b[p1]] = p1;
a[b[p2]] = p2;
swap(v[p1], v[p2]);
}
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])
{
schimb(cur, cur/2);
cur = cur/2;
}
}
void op_2(int x)
{
int cur = a[x];
schimb(a[x], n);
v[n] = INT_MAX;
--n;
while(cur > 1 && v[cur] < v[cur/2])
{
schimb(cur, cur/2);
cur = cur/2;
}
while(cur <= n/2 && (v[cur] > v[cur*2] || v[cur] > v[cur*2+1]))
{
if(v[cur*2] <= v[cur*2+1])
{
schimb(cur, cur*2);
cur = cur*2;
}
else
{
schimb(cur, cur*2+1);
cur = cur*2+1;
}
}
}
int main()
{
fin >> NR_OP;
a.push_back(0);
for(int i=1; i<=4*NR_OP+1; i++)
v[i] = INT_MAX;
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;
}