Cod sursa(job #2044922)

Utilizator MacoveiTiberiumacovei tiberiu MacoveiTiberiu Data 21 octombrie 2017 16:48:39
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[100002][18], n, m, v[100005];
void umplere()
{
	for(int j=1; j<=18; ++j)
	{
		for(int i=1; i+(1<<j)-1<=n; ++i)
		{
			rmq[i][j]= min(rmq[i][j-1], rmq[i+(1<<(j-1))][j-1]);
		}
		
	}
}
void afisare()
{
	for(int i=1; i<=m; ++i)
	{
		int st, dr;
		fin>>st>>dr;
		int k=log2(dr-st+1);
		fout<<min(rmq[st][k], rmq[dr-(1<<k)+1][k])<<"\n";
	}
	
}
int main() 
{
	fin>>n>>m;
	for(int i=1; i<=n; ++i)
	{
		fin>>v[i];
		rmq[i][0]=v[i];
	}
	umplere();
	afisare();
	
}