Cod sursa(job #1468523)

Utilizator ArkinyStoica Alex Arkiny Data 6 august 2015 11:54:48
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<iostream>
#include<math.h>
#include<fstream>
using namespace std;

#define MAX 100001
#define MAXLOG 19 

int A[MAX], D[MAX][MAXLOG], N, M, i, j;

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

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

	for (j = 1;(1 << j) < N;++j)
		for (i = 1;(i + (1 << j) - 1)<=N;++i)
			if (D[i][j - 1] <= D[i + (1 << (j-1))][j - 1])
				D[i][j] = D[i][j - 1];
			else
				D[i][j] = D[i + (1 << (j-1))][j - 1];
	int a, b,k;

	for (i = 1;i <= M;++i)
	{
		in >> a >> b;
		k = (int)log2(b - a + 1);
		if (D[a][k] <= D[b - (1 << k) + 1][k])
			out << D[a][k] << '\n';
		else
			out << D[b - (1 << k) + 1][k] << '\n';
	}

	in.close();
	out.close();
	return 0;
}