Cod sursa(job #2754121)

Utilizator izotova_dIzotova Daria izotova_d Data 25 mai 2021 09:46:45
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int MAX_N = 100001;
const int LOG = 17; // log2(100001)

int a[MAX_N];
int st[MAX_N][LOG];


int query(int L, int R)
{
	int len = R - L + 1;
	int k = 0;
	while ((1 << (k + 1)) <= len)
	{
		k++;
	}
	return min(st[L][k], st[R - (1 << k) + 1][k]);
}

int main()
{
	//input here
	int n, m;
	fin >> n;
	fin >> m;

	for (int i = 0; i < n; i++)
	{
		fin >> a[i];
		st[i][0] = a[i];
	}

	//preprocessing the mins

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

	//answering the queries

	for (int i = 0; i < m; i++)
	{
		int L, R;
		fin >> L >> R;
		fout << query(L-1, R-1) << "\n";
	}
}