Cod sursa(job #1412052)

Utilizator BaTDucKMocanu George BaTDucK Data 1 aprilie 2015 08:40:21
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<bits/stdc++.h>

#define Nmax 100005

using namespace std;

int N, M, RMQ[20][Nmax], Log[Nmax];

int main()
{
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);

    scanf("%d%d", &N, &M);
    Log[0] = -1;
    for(int i = 1; i <= N; ++ i)
        scanf("%d", &RMQ[0][i]),
        Log[i] = Log[i/2] + 1;

    for(int i = 1; (1 << i) <= N; ++ i)
        for(int 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) {
        int X, Y, K;
        scanf("%d %d", &X, &Y);

        K = Log[Y - X + 1];
        printf("%d\n", min(RMQ[K][X], RMQ[K][Y - (1 << K) + 1]));
    }
    return 0;
}