Cod sursa(job #2480958)

Utilizator XXMihaiXX969Gherghinescu Mihai Andrei XXMihaiXX969 Data 26 octombrie 2019 11:54:30
Problema Range minimum query Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

const int DIM = 1e5+7;

int v[DIM];
int arb[4 * DIM];

void build(int poz, int l, int r)
{
    if(l == r)
    {
        arb[poz] = v[l];
        return ;
    }

    int mid = l + (r - l) / 2;

    build(poz * 2, l, mid);
    build(poz * 2 + 1 , mid + 1, r);

    arb[poz] = min(arb[poz * 2], arb[poz * 2 + 1]);
}

int query(int poz, int l, int r, int st, int dr)
{
  if(st <= l && r <= dr)
        return arb[poz];
   int rez = 1e6;

   int mid = l + (r - l) / 2;

   if(mid >= st)
    rez = min(rez,query(poz * 2, l, mid, st, dr));
   if(mid < dr)
    rez = min(rez,query(poz * 2 + 1, mid + 1, r, st, dr));

   return rez;

}

int main()
{
    int n,m;
    in >> n >> m;

    for(int i = 1; i <= n; i++)
        in >> v[i];

    build(1, 1, n);

    while(m--)
    {
        int x, y;
        in >> x >> y;
        out << query(1, 1, n, x, y) << "\n";
    }
    return 0;
}