Cod sursa(job #3161341)

Utilizator dobreraduDobre Radu Fabian dobreradu Data 26 octombrie 2023 18:05:15
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 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], lg2[NMAX];
int main()
{
    int n, m;
    in >> n >> m;
    for( int i = 1 ; i <= n ; i++ )
        in >> v[i];
    for( int i = 1 ; i <= n ; i++ )
        dp[0][i] = v[i];
    for( int i = 1 ; (1 << i) <= n; i++ )
		for( int j = 1; j + (1 << i) - 1 <= n; j++)
			dp[i][j] = min( dp[i - 1][j], dp[i - 1][j + (1 << (i - 1))]);
    lg2[1] = 0;
	for( int i = 2 ; i <= n ; i++ )
		lg2[i] = lg2[i / 2] + 1;
	for( int i = 1; i <= m ; i++ ){
		int a, b;
		in >> a >> b;
		int lung = (b - a + 1), lg = lg2[lung];
		out << min(dp[lg][a], dp[lg][b - (1 << lg) + 1]) << '\n';
	}
    return 0;
}