Cod sursa(job #2545819)

Utilizator CyborgSquirrelJardan Andrei CyborgSquirrel Data 13 februarie 2020 16:00:58
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, m;
int ma[24][1000041];

int log2(int a){
	int r = 0;
	while(a > 1){
		a >>= 1;
		r++;
	}
	return r;
}

void buildit(){
	int lg = log2(n);
	for(int i = 1; i <= lg; ++i){
		int off = 1<<(i-1);
		for(int j = 1; j+off-1 <= n; ++j){
			ma[i][j] = min(ma[i-1][j], ma[i-1][j+off]);
		}
	}
}

int getit(int a, int b){
	int lg = log2(b-a+1);
	int off = 1<<lg;
	return min(ma[lg][a], ma[lg][b-off+1]);
}

int main(){
	fin >> n >> m;
	for(int i = 1; i <= n; ++i){
		fin >> ma[0][i];
	}
	buildit();
	
	for(int i = 0; i < m; ++i){
		int a, b;
		fin >> a >> b;
		fout << getit(a, b) << "\n";
	}
	return 0;
}