Cod sursa(job #2299899)

Utilizator marcudanfDaniel Marcu marcudanf Data 10 decembrie 2018 14:28:30
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.64 kb
#include <iostream>
#include <fstream>

const int NMAX = 1e5 + 5;

using namespace std;

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

int n, m;
int v[NMAX][20];
int Log[NMAX];

int rmq(int a, int b){
	int k = Log[b-a+1];
	return min(v[a-1][k], v[b-(1<<k)][k]);
}

void precalculate(){
	for(int i = 2; i <= n; i++)
		Log[i] = Log[i/2] + 1;
	for(int j = 1; j <= Log[n]; j++)
		for(int i = 0; i + (1<<(j-1)) <= n; i++)
			v[i][j] = min(v[i][j-1], v[i+(1<<(j-1))][j-1]);
}

int main(){
	fin >> n >> m;
	for(int i = 0; i < n; i++)
		fin >> v[i][0];
	precalculate();
	while(m--){
		int a, b;
		fin >> a >> b;
		fout << rmq(a, b) << '\n';
	}
	return 0;
}