Cod sursa(job #1403619)

Utilizator 4ONI2015oni2015 4ONI2015 Data 27 martie 2015 14:25:02
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>

using namespace std;
int rmq[18][1 >> 18], x, y, a[1 << 18], niv, lg, i, j, n, m, N;
int main()
{
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(i = 1; i <= n; i++)
        scanf("%d", &rmq[0][i]);
    for(i = 2; i <= n; i <<= 1)
        a[i] = 1;
    for(i = 1; i <= n; i++)
        a[i] += a[i - 1];
    N = a[n];
    for(i = 1; i <= N; i++)
        for(j = 1; j <= n - (1 << i) + 1; j++)
            rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
    for(; m; m--)
    {
        scanf("%d%d", &x, &y);
        lg = y - x + 1;
        niv = a[lg];
        printf("%d\n", min(rmq[niv][x], rmq[niv][y - (1 << niv) + 1]));
    }
    return 0;
}