Cod sursa(job #2816016)

Utilizator alextmAlexandru Toma alextm Data 10 decembrie 2021 21:06:44
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>
using namespace std;

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

const int MAXN = 1e6 + 1;
const int MAXLOG = 17;

int n, v[MAXN], lg[MAXN];
int M[MAXN][MAXLOG];

void RMQ() {
	for(int i = 1; i <= n; i++)
		M[i][0] = v[i];
		
	for(int k = 1; k <= lg[n]; k++)
		for(int i = 1; i + (1 << k) - 1 <= n; i++)
			M[i][k] = min(M[i][k-1], M[i + (1 << (k - 1))][k - 1]);
}

int query(int L, int R) {
	int k = lg[R - L + 1];
	return min(M[L][k], M[R - (1 << k) + 1][k]);
}

int main() {
	int q, L, R;
	
	fin >> n >> q;
	for(int i = 1; i <= n; i++) {
		fin >> v[i];
		if(i > 1)
			lg[i] = lg[i / 2] + 1;
	}
		
	RMQ();
	
	while(q--) {
		fin >> L >> R;
		fout << query(L, R) << "\n";
	}
	
	return 0;
}