Cod sursa(job #750839)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 23 mai 2012 12:55:03
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include<stdio.h>
#define dim 200000
int i , n , m , x , y ,lungime,j,min=99999999;
int P[dim];
int A[dim][30];

FILE*f=fopen("rmq.in","r");
FILE*g=fopen("rmq.out","w");

int minim(int a, int b){
	if(a<b)
		return a;
	return b;
}

int main(){
	fscanf(f,"%d%d",&n,&m);
	for(i=1;i<=n;i++)
		fscanf(f,"%d",&A[i][0]);
	
	for(j=1;(1<<j)<=n;j++){
		for(i=1;i<=n-j+1;i++){
			A[i][j]=minim( A[i][j-1], A[ i+(1<<(j-1)) ] [j-1] );
		}
	}
	for(i=2;i<=n;i++)
		P[i]=1+P[i/2];
	for(i=1;i<=m;i++){
		fscanf(f,"%d%d",&x,&y);
		lungime=y-x+1;
		fprintf(g,"%d\n",minim(A[x][P[lungime]],A[y-(1<<P[lungime])+1][P[lungime]]));
	}
	return 0;
}