Cod sursa(job #2812649)

Utilizator sanzianagrecuSanziana Grecu sanzianagrecu Data 4 decembrie 2021 21:02:17
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>

using namespace std;

ifstream cin("rmq.in");
ofstream cout("rmq.out");

#define NMAX 100'001
#define LOG 18

int n, q, rmq[NMAX][LOG], a[NMAX];

int Raspuns(int st, int dr);

int main(){

	cin >> n >> q;
	for(int i = 1; i <= n; ++ i){
		cin >> a[i];
		rmq[i][0] = a[i];
	}

	for(int k = 1; (1 << k) <= n; ++ 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]);


	for(int st, dr, i = 1; i <= q; ++ i){
		cin >> st >> dr;
		cout << Raspuns(st, dr) << '\n';
	}


	return 0;
}


int Raspuns(int st, int dr){

	int lungime = (dr - st) + 1;

	int k = 0;
	while((1 << (k + 1)) <= lungime)
		k ++;

	return min(rmq[st][k], rmq[dr - (1 << k) + 1][k]);

}