Cod sursa(job #2932022)

Utilizator andreiiorgulescuandrei iorgulescu andreiiorgulescu Data 1 noiembrie 2022 17:10:38
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#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;
}