Pagini recente » Cod sursa (job #215919) | Cod sursa (job #1848563) | Cod sursa (job #48015) | Cod sursa (job #2757767) | Cod sursa (job #2932022)
#include <bits/stdc++.h>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
int n,a[200005],aint[800005];
const int inf = 2e9;
void build(int p,int l,int r)
{
if (l == r)
aint[p] = l;
else
{
int fs = 2 * p,fd = 2 * p + 1;
int mij = (l + r) / 2;
build(fs,l,mij);
build(fd,mij + 1,r);
if (a[aint[fs]] <= a[aint[fd]])
aint[p] = aint[fs];
else
aint[p] = aint[fd];
}
}
void update(int p,int l,int r,int dest,int val)
{
if (l != r)
{
int fs = 2 * p,fd = 2 * p + 1;
int mij = (l + r)/ 2;
if (dest <= mij)
update(fs,l,mij,dest,val);
else
update(fd,mij + 1,r,dest,val);
if (a[aint[fs]] <= a[aint[fd]])
aint[p] = aint[fs];
else
aint[p] = aint[fd];
}
}
int main()
{
in >> n;
for (int i = 1; i <= n; i++)
a[i] = inf;
build(1,1,n);
int sz = 0;
for (int i = 1; i <= n; i++)
{
int x,y;
in >> x;
if (x == 3)
out << a[aint[1]] << '\n';
else
{
in >> y;
if (x == 1)
{
sz++;
a[sz] = y;
update(1,1,n,sz,y);
}
else
{
a[y] = inf;
update(1,1,n,y,inf);
}
}
}
return 0;
}