Cod sursa(job #3196128)

Utilizator dumitrache12Dumitrache Iulian dumitrache12 Data 22 ianuarie 2024 20:27:54
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.65 kb
#include<bits/stdc++.h>
using namespace std;

const int N = 100009;
const int L = 20;

ifstream in ("rmq.in");
ofstream out("rmq.out");
// auto& in = cin;
// auto& out = cout;

int n, m;
long long sp[L][N];

void init() {
	for(int j = 0; (1 << j) < n; j++)
		for(int i = 0; i + (1 << j) < n; i++) 
			sp[j+1][i] = min(sp[j][i], sp[j][i + (1 << j)]);
}

int query(int l, int r) {
	int d = r - l;
	int j = 0;
	while((1 << j) <= d)
		j++;
	j--;
	return min(sp[j][l], sp[j][r - (1 << j) + 1]);
}

int main(){
	in>>n>>m;
	for(int i = 0; i < n; i++)
		in>>sp[0][i];
	init();

	int a, b;
	for(int i = 0; i < m; i++) {
		in>>a>>b;
		out<<query(a-1, b-1)<<endl;
	}
	return 0;
}