Cod sursa(job #3282995)

Utilizator maxtraAlex Deonise maxtra Data 7 martie 2025 19:37:58
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");

#define MAXN 100005


int a[MAXN];
int r[MAXN][17];
int E[MAXN+1];

void consMat(int n) {
	E[1] = 0;
	for (int i = 2; i <= n; i++) {
		E[i] = E[i/2] + 1;
	}

	for (int i = 0; i < n; i++) {
		r[i][0] = a[i];
	}

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

int intr(int st, int dr) {
	int j = E[dr - st + 1];
	return min(r[st][j], r[dr - (1 << j) + 1][j]);
}

int main() {
	int n, q;
	in >> n >> q;

	for (int i = 0; i < n; i++)
		in >> a[i];

	consMat(n);

	while (q--) {
		int st, dr;
		in >> st >> dr;
		st--;
		dr--;
		out << intr(st, dr) << endl;
	}

	return 0;
}