Cod sursa(job #3185058)

Utilizator CzarPopescu Cezar Stefan Cristian Czar Data 17 decembrie 2023 18:46:44
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <vector>
#include <climits>
#include<unordered_map>
#include <algorithm>
#include <set>
#include<string>
#include<map>
#include<fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
#define ll long long

int r[17][100005];
int E[100005];

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n, m;
	in >> n >> m;
	for (int i = 1; i <= n; i++) {
		in >> r[0][i];
	}
	for (int p = 1; (1 << p) <= n; p++) {
		for (int i = 1; i+(1<<p)-1 <= n; i++) {
			r[p][i] = min(r[p - 1][i], r[p - 1][i + (1 << (p-1))]);
		}
	}
	for (int i = 2; i <= n; i++) {
		E[i] = E[i / 2] + 1;
	}
	while (m--) {
		int st, dr;
		in >> st >> dr;	
		int e=e = E[dr - st + 1];
		int len = (1 << e);
		out << min(r[e][st], r[e][dr - len + 1])<<"\n";
	}
}