Cod sursa(job #2445557)

Utilizator Briana_NeaguNeagu Briana Briana_Neagu Data 4 august 2019 16:31:47
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#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);
           }
       }
    }
}