Cod sursa(job #900136)

Utilizator fhandreiAndrei Hareza fhandrei Data 28 februarie 2013 17:49:39
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
// Include
#include <fstream>
using namespace std;

// Constante
const int sz = (int)1e5+1;

// Variabile
ifstream in("rmq.in");
ofstream out("rmq.out");

int num, questions;

int LG[sz];

int rmq[21][sz];

// Main
int main()
{
	in >> num >> questions;
	
	for(int i=2 ; i<=sz ; ++i)
		LG[i] = LG[i/2]+1;
	
	for(int i=1 ; i<=num ; ++i)
		in >> rmq[0][i];
	
	for(int i=1 ; (1<<i)<=num ; ++i)
		for(int j=1 ; j<=num-(1<<i)+1 ; ++j)
			rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+(1<<i-1)]);	
	
	while(questions--)
	{
		int left, right;
		in >> left >> right;
		int length = right - left + 1;
		
		int line = LG[length];
		out << min(rmq[line][left], rmq[line][right-(1<<line)+1]) << '\n';
	}
	
	
	in.close();
	out.close();
	return 0;
}