Cod sursa(job #1116752)

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

using namespace std;

FILE *in,*out;

//definitii

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

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

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;
}