Cod sursa(job #2096649)

Utilizator ArctopusKacso Peter-Gabor Arctopus Data 29 decembrie 2017 15:49:33
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>

using namespace std;

ifstream fcin("rmq.in");
ofstream fcout("rmq.out");

const int NLIM = 1e5 + 10;

int n, m;
int M[NLIM][20];



int main()
{
	fcin >> n >> m;
	for( int i = 0; i < n; ++i )
		fcin >> M[i][0];



	for( int j = 1; ( 1 << j ) <= n; ++j )
	{
		for( int i = 0; i < n; ++i )
		{
			if( !( i + ( 1 << ( j - 1 ) ) < n ) || M[i][j - 1] < M[i + ( 1 << ( j - 1 ) )][j - 1] ) 
				M[i][j] = M[i][j - 1];
			else
				M[i][j] =  M[i + ( 1 << ( j - 1 ) )][j - 1];
		}
	}



	for( int i = 0; i < m; ++i )
	{
		int x, y;
		fcin >> x >> y; --x; --y;
		int k = log2( y - x + 1 );

		fcout << min( M[x][k], M[y - ( 1 << k ) + 1][k] ) << "\n";
	}
}