Cod sursa(job #2280284)

Utilizator hristacheruxiRuxandra Hristache hristacheruxi Data 10 noiembrie 2018 13:24:05
Problema Lowest Common Ancestor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>
#define NMAX 100000
using namespace std;

int v[NMAX + 1], logg[20], d[NMAX + 1][20];

int main(){
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    int n, m, i, j, p;

    scanf("%d%d", &n, &m);
    for (i = 1; i <= n; i++)
        scanf("%d", &v[i]);

    for (i = 1; i <= n; i++)
        d[i][0] = v[i];

    for (p = 1; (1 << p) < n; p++) //p^2
        for (i = 1; i + (1 << p) - 1 <= n; i++)
            d[i][p] = min(d[i][p - 1], d[i + (1 << p - 1)][p - 1]);

    logg[1] = 0;
    for (i = 2; i <= n; i++)
        logg[i] = logg[i / 2] + 1;

    for (m; m > 0; m--)
    {
        scanf("%d%d", &i, &j);
        printf("%d\n", min(d[i][logg[j - i]], d[j - (1 << logg[j - i]) + 1][logg[j - i]]));
    }

    return 0;
}