Cod sursa(job #2553250)

Utilizator Florinos123Gaina Florin Florinos123 Data 21 februarie 2020 19:40:43
Problema Teren Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>

using namespace std;

ifstream f ("rmq.in");
ofstream g ("rmq.out");

int n, t, x, poz, arbore[300005];
int minim, stanga, dreapta;
const int inf = 1999999;

void update (int nod, int st, int dr)
{
    if (st == dr)
    {
        arbore[nod] = x;
        return;
    }

    int  mij = (st + dr) / 2;
     if (poz <= mij)
        update(nod*2, st, mij);
     else
        update(nod*2+1, mij+1, dr);

     arbore[nod] = min(arbore[2*nod], arbore[2*nod+1]);
}

void querry (int nod, int st, int dr)
{
    if (stanga <= st && dreapta >= dr)
    {
        minim = min(minim, arbore[nod]);
        return;
    }

    int mij = (st + dr) / 2;

    if (stanga <= mij)
        querry(nod*2, st, mij);
    if (mij < dreapta)
        querry(nod*2+1, mij+1, dr);
}

int main()
{
int i;
  f >> n >> t;
   for (i=1; i<=n; i++)
   {
       f >> x;
       poz = i;
       update(1, 1, n);
   }

   for (i=1; i<=t; i++)
   {
       f >> stanga >> dreapta;
       minim = inf;
       querry(1, 1, n);
       g << minim << '\n';
   }
    return 0;
}