Cod sursa(job #2964670)

Utilizator RobertlelRobert Robertlel Data 13 ianuarie 2023 16:26:10
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int LOG = 17;
int n , q , v[100005] , m[100005][32]  , x ,y;

int querry (int a , int b)
{
    int k = 0;
    while ( (1 << k) <= (b - a + 1))
           k++;
    k--;
    return min (m[a][k] , m[b - (1 << k) + 1][k]);

}

int main()
{
    f >> n >> q;
    for (int i = 1 ; i <= n; i++)
        f >> v[i];
    for (int i = 1 ; i <= n ; i++)
        m[i][0] = v[i];
    for (int k = 1 ; k <= 17 ; k++)
    {
        for (int i = 1 ; i + (1 << k) - 1 <= n ; i++)                 // 1 << x inseamna 2 la puterea x
        {
            m[i][k] = min (m[i][k - 1] , m[i +(1<<(k - 1))][k - 1]);
        }
    }

   for (int i = 1 ; i <= q ; i++)
   {
       f >> x >> y;
       g << querry (x , y) << '\n';;
   }
    return 0;
}