Cod sursa(job #2900615)

Utilizator stefanliciuLiciu Vasile-Stefan stefanliciu Data 11 mai 2022 15:59:30
Problema Range minimum query Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

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

const int NMAX = 100001;
const int K = 16; //>= log2(100000);
int d[NMAX + 1][K + 1];

int main()
{
	int N, M, x, y;
	int* v;

	fin >> N >> M;
	v = new int[N + 1];

	for (int i = 1; i <= N; ++i)
	{
		fin >> v[i];
		d[i][0] = v[i];
	}
	
	for (int j = 1; j <= K; ++j)
		for (int i = 1; i + (1 << j) <= N + 1; ++i)
		{
		  int p = 1 << (j - 1);
		  if (d[i][j - 1] < d[i + p][j - 1])
		  {
		   d[i][j] = d[i][j - 1];
		  }
		  else d[i][j] = d[i + p][j - 1];
		}
	for (int i = 1; i <= M; ++i)
	{
		fin >> x >> y;
		int dim = y - x + 1;
		int l = (int)log2(dim);
		if (log2(dim) == l)
		{
			fout << min(d[x][l], d[y][0])<<'\n';
		}
		else
		{
			
			fout << min(d[x][l], d[y - (1 << l) + 1][l])<<'\n';
		}
	}
	
	return 0;

}