Cod sursa(job #401975)

Utilizator dexter_dexMutascu Adrian - Dragos dexter_dex Data 23 februarie 2010 11:37:50
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#include <algorithm>

#define Nmax 100005

using namespace std;

int n, m, i, k, q, x, y, sol = Nmax;
int a[17][Nmax], v[Nmax], log[Nmax];


void preprocesare(){
	
	for (i = 1 ; i <= n ; i++)
		a[0][i] = v[i];
	for (k = 1 ; 1 << k <= n ; k++)
		for (i = 1 ; i <= n - (1<<k) + 1 ; i++)
			a[k][i] = min(a[k-1][i], a[k-1][i + (1<<(k-1))]);
		
	for (i = 2 ; i <= n ; i++)
		log[i] = log[i/2] + 1;

}


int main (){
	
	
	FILE * f = fopen ("rmq.in", "r");
	FILE * g = fopen ("rmq.out", "w");
	
	fscanf (f, "%d %d", &n, &m);
	for (i = 1 ; i <= n ; i++)
		fscanf (f, "%d", &v[i]);
	
	preprocesare();
	
	for (i = 1 ; i <= m ; i++){
		fscanf(f, "%d %d", &x, &y);
		q = log [y - x];
		for (i = x ; i <= y - (1<<q) + 1 ; i++)
			if (sol > a[q][i])
				sol = a[q][i];
		fprintf (g, "%d", sol);
	}
	
	
	fclose(f);
	fclose(g);
	return 0;
}