Cod sursa(job #2493857)

Utilizator The_one_and_onlyMironica Vasile The_one_and_only Data 17 noiembrie 2019 04:39:11
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#define inf 100001
using namespace std;

ifstream cin("rmq.in");
ofstream cout("rmq.out");
int a[1 << 18], n, t, N;

void update(int pos, int x) {
	for(int i = pos + N; i; i >>= 1)
		a[i] = min(a[i], x);
}

int Min(int st, int dr) {
	int ans = min(a[--st + N], a[--dr + N]);
	
	for(st += N, dr += N; st < dr; st >>= 1, dr >>= 1) {
		if(st & 1)
			ans = min(ans, a[st++]);
		if(dr & 1)
			ans = min(ans, a[--dr]);
	}
	return ans;
}

int main() {
	cin >> n >> t;
	N = n;
	while(N & (N - 1))
		N += N & -N;
	for(int i = N << 1; i; --i)
		a[i] = inf;
	
	for(int i = 0; i < n; ++i) {
		int x;
		cin >> x;
		update(i, x);
	}
	cout << "        1\n   1           3\n 1   4   3          100001\n1 5 6 4 3 100001 100001 100001\n";
	while(t--) {
		int st, dr;
		cin >> st >> dr;
		cout << Min(st, dr) << '\n';
	}
	return 0;
}