Cod sursa(job #1730897)

Utilizator theo.stoicanTheodor Stoican theo.stoican Data 17 iulie 2016 19:37:06
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n,m;
vector<int> vec;
int rmq[20][100003];
int v[100003];
void processlog()
{
	for (int i = 2; i <= 100000;i++)
	{
		v[i] = 1 + v[i/2];
	}
}

int main()
{
	processlog();
	fin>>n>>m;
	for (int i = 1; i <= n; i++)
		fin>>rmq[i][0];
	for (int j = 1; (1<<j) <= n; j++)
	{
		for (int i = 1; i<=n-(1<<j)+1; i++)
		{
			rmq[i][j] = min (rmq[i][j-1], rmq[i+(1<<(j-1))][j-1]);
		}
	}
	for (int i = 1; i <= m; i++)
	{
		int x,y;
		fin>>x>>y;
		int d= y - x + 1;
		int length = v[d];
		int minim = min (rmq[x][length], rmq[y-(1<<length) + 1][length]);
		fout<<minim<<"\n";
	}
}