Cod sursa(job #2611094)

Utilizator LXGALXGA a LXGA Data 6 mai 2020 13:17:45
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <ctime>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n, m;
int l, r;
int v[100001];
int rmq[17][100001];
int lg[100001];

void genrmq()
{
	for (int i = 1; i <= n; i++)
	{
		rmq[0][i] = v[i];
	}
	for (int j = 1; j <= lg[n]; j++)
	{
		for (int i = 1;i<=n-(1<<j); i++)
		{
			rmq[j][i] = min(rmq[j - 1][i], rmq[j - 1][i + (1 << (j-1))]);
		}
	}
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		cin >> v[i];
	for (int i = 2; i <= n; i++)
		lg[i] = lg[i / 2] + 1;
	genrmq();
	for (int i = 1; i <= m; i++)
	{
		cin >> l >> r;
		int x = lg[r - l];
		cout << min(rmq[x][l], rmq[x][r-(1<<x)+1])<<"\n";
	}
	return 0;
}