Cod sursa(job #2462304)

Utilizator lucian2015blaugranadevil lucian2015 Data 27 septembrie 2019 01:37:09
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>
#include <cmath>

using namespace std;

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


int main(){
int  *vect, i, j, x, y, n, kk;
f >> n >> kk;
int M[n][18] = {0};
vect = new int[n + 1];
for( i = 0; i < n; i++ ){
	f >> vect[i];
	M[i][0] = i;
}
for( j = 1; (1<< j) <= n; j++ )
	for( i = 0; i + (1 << j)  <= n; i++){
	if( vect[M[i][j-1]] < vect[M[i + (1<<(j - 1))][j - 1]] )
		M[i][j] = M[i][j-1];
	else
	 M[i][j] = M[i + (1<<(j - 1))][j - 1];
}

for( i = 1; i <= kk; i++){
	f >> x >> y;
	int k = int(log2(y - x + 1));
	x--;
	y--;
	if( vect[M[x][k]] <= vect[M[y - (1<<k) + 1][k]])
		g << vect[M[x][k]]<<"\n";
	else
		g << vect[M[y - (1<<k) + 1][k]] << "\n";

}

delete []vect;


}