Cod sursa(job #1542135)

Utilizator gabi.cristacheGabi Cristache gabi.cristache Data 5 decembrie 2015 00:35:17
Problema Range minimum query Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
// infoarenaDFSnonRec.cpp : Defines the entry point for the console application.
//

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

#define MaxN 100005

using namespace std;

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

int N, M;
int val[MaxN];
int rmq[MaxN][MaxN / 100];
int lg[MaxN];

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

int main() {
	fin >> N >> M;

	lg[1] = 0;
	fin >> val[1];
	for (int i = 2; i <= N; ++i) {
		fin >> val[i];
		lg[i] = lg[i / 2] + 1;
	}

	for (int i = 1; i <= N; ++i)
		rmq[i][0] = val[i];

	for (int i = 1; (1 << i) <= N; ++i) {
		int l = (1 << (i - 1));
		for (int j = 1; j + (1 << i) - 1 <= N ; ++j) {
			rmq[j][i] = min(rmq[j][i-1], rmq[j + l][i-1]);
		}
	}

	for (int i = 1; i <= M; ++i) {
		int a, b;
		fin >> a >> b;
		int diff = b - a + 1;
		int l = lg[diff];
		fout << min(rmq[a][l], rmq[b - (1 << l) + 1][l]) << '\n';
	}

	return 0;
}