Cod sursa(job #809817)

Utilizator ahmed.abdraboahmed.abdrabo ahmed.abdrabo Data 9 noiembrie 2012 03:07:53
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <cstdio>
#include <algorithm>

using namespace std;

inline int next_int() {
	int d;
	scanf("%d", &d);
	return d;
}

const int H = 17;
int M[1 << H][H];

int main() {
	freopen("rmq.in", "r", stdin);
	freopen("rmq.out", "w", stdout);
	int n = next_int();
	int m = next_int();
	for (int i = 0; i < n; i++) {
		M[i][0] = next_int();
	}
	for (int j = 1; j < H; j++) {
		for (int i = 0; i + (1 << (j - 1)) < (1 << H); i++) {
			M[i][j] = min(M[i][j - 1], M[i + (1 << (j - 1))][j - 1]);
		}
	}
	for (int i = 0; i < m; i++) {
		int a = next_int() - 1;
		int b = next_int();
		int k = H;
		while ((1 << k) > b - a) {
			k--;
		}
		printf("%d\n", min(M[a][k], M[b - (1 << k)][k]));
	}
	return 0;
}