Cod sursa(job #2608683)

Utilizator matthriscuMatt . matthriscu Data 1 mai 2020 17:47:18
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <cstdio>
#define min(a, b) ((a < b) ? a : b)

int a[20][100005], logg[100005];

int main() {
    int n, m, i, j, x, y, l;
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    scanf("%d%d%d", &n, &m, &a[1][1]);
    for(i = 1; i <= n; ++i) {
        scanf("%d", &a[1][i]);
        logg[i] = logg[i/2] + 1;
    }

    for(i = 2; i <= logg[n] + 1; ++i)
        for(j = 1; j + (1 << (i-1)) <= n + 1; ++j)
            a[i][j] = min(a[i-1][j], a[i-1][j + (1 << (i-2))]);

    for(i = 1; i <= m; ++i) {
        scanf("%d%d", &x, &y);
        l = logg[y-x+2];
        printf("%d\n", min(a[l][x], a[l][x + (1 << (l-2))]));
    }
}