Cod sursa(job #3222421)

Utilizator nitr0Vlad Ioan Barbacuti nitr0 Data 10 aprilie 2024 00:35:28
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h> 
using namespace std;
#define ll long long

int precompute[100005][18];

void solve() {
	int n, m;
	cin >> n >> m;
	for(int i = 1; i <= n; i++) cin >> precompute[i][1];
	for(int k = 1; k < 19; k++) {
		for(int i = 1; i <= n-(1<<k)+1; i++) {
			precompute[i][1<<k] = min(precompute[i][1<<(k-1)], precompute[i+(1<<(k-1))][1<<(k-1)]);
		}
	}
	while(m--) {
		int x, y;
		cin >> x >> y;
		if(x == y) {
			cout << precompute[x][1] << '\n';
			continue;
		}
		int p = 0;
		while((1<<p) < y-x+1) p++;
		p--;
		cout << min(precompute[x][1<<p], precompute[y-(1<<p)+1][1<<p]) << '\n';
	}
}

int main() {
	freopen("rmq.in", "r", stdin);
	freopen("rmq.out", "w", stdout);
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int t=1;
	//cin >> t;
	while(t--) solve();
}