Cod sursa(job #1784767)

Utilizator andreiulianAndrei andreiulian Data 20 octombrie 2016 14:48:47
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include<iostream>
#include<fstream>
#include<climits>
#include<cmath>
using namespace std;
int v[100005], ms[330];
int main(){
	ifstream in("rmq.in");
	ofstream out("rmq.out");
	int N, M, i, j, l, a, b, mm;
	in >> N >> M;
	l = sqrt(N);
	for (i = 0; i < 329; ++i) ms[i] = INT_MAX;
	for (i = 0; i < N; ++i) {
		in >> v[i];
		if (ms[i/l] > v[i]) ms[i/l] = v[i];
	}
	while (M--) {
		in >> a >> b;
		--a, --b;
		mm = INT_MAX;
		for(i = a; i % l; ++i) if(mm > v[i]) mm = v[i];
		for(j = i/l; j * l < b; ++j) if(mm > ms[j]) mm = ms[j];
		for(i = j * l; i <= b; ++i) if(mm > v[i]) mm = v[i];
		out << mm <<'\n';
	}
}