Cod sursa(job #1529791)

Utilizator tonisnakesBoar Antonio tonisnakes Data 21 noiembrie 2015 11:21:11
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");

const int maxn = 100005;
int n, m, rmq[17][maxn], l[maxn], x, y, k;

int main ()
{
	fin >> n >> m;
	for (int i = 1; i <= n; ++i){
		fin >> rmq[0][i];
	}
	for (int i = 1; (1 << i) <= n; ++i){
		for (int j = 1; j <= n - (1 << i) + 1; ++j){
			rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+(1<<(i-1))]);
		}
	}

	l[1] = 0;
	for (int i = 2; i <= n; ++i){
		l[i] = l[i/2] + 1;
	}

	for (int i = 1; i <= m; ++i){
		fin >> x >> y;
		k = l[y-x+1];
		fout << min(rmq[k][x], rmq[k][y-(1<<k)+1]) << '\n';
	}

	fin.close();
	fout.close();
	return 0;
}