Cod sursa(job #2191849)

Utilizator Seb16Ungureanu Paul Sebastian Seb16 Data 3 aprilie 2018 21:25:26
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <iostream>
#include <fstream>
#include <vector>
#define N 100001

using namespace std;

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

int v[18][100001];
int n, m, x;

int logs[N];

void compute_logs() {
	for(int i = 2; i <= n; i++) {
		logs[i]=logs[(i >> 1)] +1;
	}
}

int main() {
	fin >> n >> m;
	for (int i = 1; i <= n; ++i) {
		fin >> v[0][i];
	}

	for (int i = 1; (1 << i) <= n; ++i) {
		for (int j = 1; j + (1 << i ) - 1 <= n; ++j) {
			v[i][j] = min(v[i - 1][j], v[i - 1][j + (1 << (i - 1))]);
		}
	}

	int p, q;
	for (int i = 0; i < m; ++i) {
		fin >> p >> q;
		int ldif = logs[q - p + 1];
		fout << min(v[ldif][p], v[ldif][q + 1 - (1 << ldif)]) << '\n';
	}

	return 0;
}