Cod sursa(job #2084486)

Utilizator netfreeAndrei Muntean netfree Data 9 decembrie 2017 10:04:29
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <bits/stdc++.h>

using namespace std;

const int N_MAX = 100000 + 5;

ifstream fin ("rmq.in");
ofstream fout("rmq.out");

int n, m;
int dp[25][N_MAX];

void rmq(){
    for(int level = 1; level <= log2(n); ++level)
        for(int j = 1; j<=n; ++j)
            dp[level][j] =  min(dp[level-1][j], dp[level-1][j + (1 << (level-1))]);
}

int main()
{
    fin >> n >> m;
    for(int i = 1; i<=n; ++i)
        fin >> dp[0][i];

    rmq();

    while(m--){
        int a, b; fin >> a >> b;
        int nivel = log2(b-a+1);
        fout << min(dp[nivel][a], dp[nivel][b - (1 << nivel) + 1]) << "\n";
    }

    return 0;
}