Cod sursa(job #1500413)

Utilizator ArkinyStoica Alex Arkiny Data 11 octombrie 2015 21:58:54
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include<fstream>
#include<algorithm>
using namespace std;

#define MI(a,b) (a<b? a:b)

ifstream in("rmq.in");
ofstream out("rmq.out");
#define MAX 100001
int N;

int A[18][MAX],i,j,M;

int main()
{
	in >> N>>M;
	for (i = 1;i <= N;++i)
		in >> A[0][i];
	for (i = 1;(1 << i) <= N;++i)
	{
		for (j = 1;j <= N - (1 << i) + 1;++j)
		{
			A[i][j] = MI(A[i - 1][j], A[i - 1][j + (1 << (i - 1))]);
		
		}
	
	}

	int a, b;
	while (in >> a && in >> b)
	{
		int l=0;
		while (1 << l <= b - a + 1)
			++l;
		--l;
		out << MI(A[l][a], A[l][b - (1<<l) + 1]) << '\n';
	}

	return 0;
}