Cod sursa(job #2647738)

Utilizator BogdanTicuTicu Bogdan Valeriu BogdanTicu Data 6 septembrie 2020 01:07:22
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.56 kb
#include <bits/stdc++.h>

using namespace std;

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


long long rmq[20][100005];
long long lgg[100005];
int main()
{
	int n,m;
	in>>n>>m;
	for(int i=1;i<=n;i++)
		in>>rmq[0][i];
	lgg[1]=0;
	for(int i=2;i<=n;i++)
		lgg[i]=lgg[i/2]+1;
	for(int i=1;(1<<i)<=n;i++)
	{
		for(int j=1;j<=n-(1<<i)+1;j++)
		{
				rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
		}
	}
	for(int i=1;i<=m;i++)
	{
		int x,y;
		in>>x>>y;
		long long a=lgg[y-x+1];
		long long b=(y-x+1)-(1<<a);
		out<<min(rmq[a][x],rmq[a][x+b])<<"\n";
	}
	return 0;
}