Cod sursa(job #1111916)

Utilizator anaid96Nasue Diana anaid96 Data 19 februarie 2014 11:31:24
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<stdio.h>
#include<algorithm>

using namespace std;

FILE *in,*out;

//constante
const int Nmax= (int) 1e5+1;

//variabile
int elemente,intrebari;
int rmq[18][Nmax];
int lg[Nmax];
int left,right;

int main(void)
{
	in=fopen("rmq.in", "rt");
	out=fopen("rmq.out", "wt");
	
	fscanf(in, "%d%d", &elemente, &intrebari);
	
	for(int i=1 ; i<=elemente ; ++i)
		fscanf(in, "%d", &rmq[0][i]);
	
	for(int i=2 ; i<=elemente ; ++i)
		lg[i]=lg[i/2]+1;
	
	for(int i=1 ; (1<<i)<=elemente ; ++i)
		for(int j=1 ; j<=elemente-(1<<i)+1 ; ++j)
			rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+ (1<<(i-1))]);
		
	while(intrebari--)
	{
		fscanf(in, "%d%d", &left, &right);
		int line= lg[right-left+1];
		fprintf(out,"%d\n",min(rmq[line][left], rmq[line][right- (1<<line)+1]));
	}
	
	fclose(in);
	fclose(out);
	return 0;
	
}