Cod sursa(job #1654724)

Utilizator vladttturcuman vlad vladtt Data 17 martie 2016 13:21:57
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
// Range Minimum Query.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"
#include <fstream>
#include <cmath>

#define NMAX 100100
#define LogMAX 20
using namespace std;

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

int n, m, i, x, y;
int _rmq[NMAX][LogMAX];

int min(int a,int b)
{
	return a < b ? a : b;
}

void CreateMatrix()
{
	int LogMx = log2(n);


	for (int j = 1; j <= LogMx; j++)
	{
		x = (1 << j);
		for (i = 1; i + x -1 <= n; i++)
			_rmq[i][j] = min(_rmq[i][j - 1], _rmq[i + x / 2 ][j - 1]);
	}

}

int rmq(int in,int sf)
{
	int diff = sf - in + 1;
	int lg = log2(diff);
	return min(_rmq[in][lg], _rmq[sf - (1<<lg) +1 ][lg]);
}

int main()
{

	fin >> n;
	fin >> m;


	for (i = 1; i <= n; i++)
		fin >> _rmq[i][0];

	CreateMatrix();

	for (i = 1; i <= m; i++)
	{
		fin >> x >> y;
		fout << rmq(x, y) << '\n';
	}

    return 0;
}