Cod sursa(job #2801621)

Utilizator Ricardo03Petrovici Ricardo Ricardo03 Data 16 noiembrie 2021 17:38:24
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>
#define Nmax 100005
#define Log 17
using namespace std;
int m[Nmax][Log], a[Nmax];
int n, i, j, q, x, y;
int querry(int L, int R)
{
    int lungime = R - L + 1, k = 0;
    while((1 << (k + 1)) <= lungime)
        k++;
    return min(m[L][k], m[R - (1 << k) + 1][k]);
}
int main()
{
    ifstream f("rmq.in");
    ofstream g("rmq.out");
    f >> n >> q;
    for(i = 1; i <= n; i++)
    {
        f >> a[i];
        m[i][0] = a[i];
    }
    for(j = 1; (1 << j) < n; j++)
        for(i = 1; i + (1 << j) - 1 <= n; i++)
            m[i][j] = min(m[i][j - 1], m[i + (1 << (j - 1))][j - 1]);
    for(i = 1; i <= q; i++)
    {
        f >> x >> y;
        g << querry(x, y) << "\n";
    }
    return 0;
}