Cod sursa(job #3211805)

Utilizator CalibrixkngIordache Andrei Calibrixkng Data 10 martie 2024 13:36:58
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");

const int NMAX = 1e5+10;
int n, m, bs=0;
int v[NMAX], rmq[NMAX][17];

void citire() {
	f >> n >> m;
	int aux = n;
	while (aux) {
		bs++;
		aux = aux >> 1;
	}
	for (int i = 1; i <= n; i++) {
		int x;
		f >> x;
		v[i] = x;
		rmq[i][0] = x;
	}
}
void preprocess() {
	for (int k = 1; k <= bs; k++) {
		for (int i = 1; i + (1 << k) - 1 <= n; i++)
			rmq[i][k] = min(rmq[i][k - 1], rmq[i + (1 << (k - 1))][k - 1]);
	}
}
int query(int l, int r) {
	int length = r - l + 1;
	int k = 0;
	while ((1 << (k + 1)) <= length) {
		k++;
	}
	return min(rmq[l][k], rmq[r - (1 << k) + 1][k]);
}
int main()
{
	citire();
	preprocess();
	for (int i = 0; i < m; i++) {
		int a, b;
		f >> a >> b;
		g<<query(a, b)<<"\n";
	}

}