Cod sursa(job #980501)

Utilizator superman_01Avramescu Cristian superman_01 Data 4 august 2013 20:23:49
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<fstream>
#include<algorithm>

#define NMAX 100005


using namespace std;

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

int rmq[18][NMAX];
int lg[NMAX];
int N,M;

int main ( void )
{
	int i , j; 
	int x ,y ,pt , diff ;
	f>>N>>M;
	for( i = 1 ; i <= N ; ++i )
		f>>rmq[0][i];
	for( i = 2 ; i <= N ; ++ i )
		lg[i] = lg[i/2] + 1 ;
	
	for( i = 1 ; (1<<i) <= N ; ++i )
		for( j = 1 ; j <= N - (1<<i) +1; ++j )
	          rmq[i][j] = min ( rmq[i-1][j] , rmq[i-1][j+(1<<(i-1))] ) ;
	for( i = 1 ; i <= M ; ++i )
	{
		f>>x>>y;
        diff =  y-x +1 ;	
		pt = lg[diff] ;
		g<< min( rmq[pt][x] , rmq[ pt ][ x + diff - (1<<pt) ] )<<"\n" ;
	}
	f.close();
	g.close();
	return 0;
}