Cod sursa(job #1600238)

Utilizator sandupetrascoPetrasco Sandu sandupetrasco Data 14 februarie 2016 19:55:26
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <fstream>
#include <algorithm>
#include <cmath>

using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int N, M, A[100010], D[20][100010], l, x, y;
int main(){
		cin >> N >> M;
		for(int i = 1; i <= N; i++)
			cin >> A[i];
		for(int i = 1; i <= N; i++)
			D[0][i] = A[i];
		for(int i = 1; (1 << i) <= N; i++){
			for(int j = 1; j+(1 << i)-1 <= N; j++){
				D[i][j] = min(D[i-1][j], D[i-1][j+(1 << (i-1))]);
			}
		}
		for(int i = 1; i <= M; i++){
			cin >> x >> y;
			int diff = y-x+1;
			l = log2(diff);
			cout << min(D[l][x], D[l][y-(1 << l)+1]) << '\n';
			}
	return 0;
}