Cod sursa(job #2790983)

Utilizator whitevader28Albu Alexandru whitevader28 Data 29 octombrie 2021 21:39:40
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
using namespace std;

ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
const int MAX_N = 100000;
const int LOG = 18;
int a[MAX_N];
int m[MAX_N][LOG];
int bin_log[MAX_N];

int main() {
	int N, M, L, R, j, i, length;
	fin >> N >> M;
	bin_log[1] = 0;
	for(i = 2; i <= N; i++) {
		bin_log[i] = bin_log[i/2]+1;
	}
	for(i = 0; i < N; i++) {
		fin >> a[i];
		m[i][0] = a[i];
	}
	for(j = 1; j < LOG; j++) {
		for(i = 0; i + (1 << j) - 1 < N; i++) {
			m[i][j] = min(m[i][j-1], m[i+(1<<(j-1))][j-1]);
		}
	}
	while(M)
    {
		fin >> L >> R;
		length = R-L+1;
		L--;
		R--;
		j = bin_log[length];
		fout << min(m[L][j], m[R-(1<<j)+1][j]) << '\n';
		M--;
    }
}