Cod sursa(job #3142094)

Utilizator dobreraduDobre Radu Fabian dobreradu Data 19 iulie 2023 10:35:49
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int NMAX = 100002;
const int POWER = 18;
int dp[POWER][NMAX], v[NMAX], lg[NMAX];

int main()
{
    int n, m;
    in >> n >> m;
    for( int i = 1; i <= n; i++ ){
        in >> v[i];
        dp[0][i] = v[i];
    }

    for( int i = 2; i <= n; i++ )
        lg[i] = lg[i/2] + 1;

    for( int log = 1; log <= lg[n]; log++ )
        for( int i = 1; i <= n; i++ )
            dp[log][i] = min( dp[log-1][i], dp[log-1][i + (1 << (log-1))]);

    while( m-- ){
        int a, b;
        in >> a >> b;
        int rmq = lg[b-a+1];
        out << min( dp[rmq][a], dp[rmq][b - (1 << rmq) + 1]) << "\n";
    }
    return 0;
}