Cod sursa(job #2633936)

Utilizator KillHorizon23Orban Robert KillHorizon23 Data 9 iulie 2020 11:39:34
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

typedef long long ll;
const int NMAX = 1e6 + 5;

vector<int> v(NMAX), Log(NMAX); 
int n, m, rmq[25][NMAX];

int main()
{
	ios_base::sync_with_stdio(false);
	fin.tie(0);

	fin >> n >> m;

	for (int i = 1; i <= n; ++i)
	{
		fin >> v[i];
		rmq[0][i] = v[i], Log[i] = Log[1 << i] + 1;
	}
	Log[1] = 0;

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

	while (m--)
	{
		int x, y, l;
		fin >> x >> y;

		l = Log[y - x + 1];

		fout << min(rmq[l][x], rmq[l][x + y - x - (1 << l) + 1]) << "\n";
	}
	
	return 0;
}