Cod sursa(job #592862)

Utilizator Rares95Rares Arnautu Rares95 Data 30 mai 2011 22:42:16
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
	
  # include <cstdio>
  # define min( a, b ) a < b ? a : b
	using namespace std;
	
	int n, m, x, y, d, lin;
	int lgr[ 100001 ], a[ 20 ][ 100001 ];
	
	FILE *f, *g;
	
	int main () {
		
		f = fopen ( "rmq.in", "rt" );
		g = fopen ( "rmq.out", "wt" );
		
		fscanf ( f, "%d%d", &n, &m );
		
		for ( int i = 1; i <= n; ++i )
			fscanf ( f, "%d", &a[ 0 ][ i ] );
		
		for ( int i = 2; i <= n; ++i )
			lgr[ i ] = lgr[ i >> 1 ] + 1;
		
		for ( int i = 1; ( 1 << i ) <= n; ++i )
			for ( int j = 1; j <= n - ( 1 << i ) + 1; ++j )
				a[ i ][ j ] = min ( a[ i - 1 ][ j ], a[ i - 1 ][ j + ( 1 << ( i - 1 ) ) ] );
		
		for ( int i = 1; i <= m; ++i ) {
			fscanf ( f, "%d%d", &x, &y );
			d = y - x + 1;
			lin = lgr[ d ];
			fprintf ( g, "%d\n", min( a[ lin ][ x ], a[ lin ][ x + d - ( 1 << lin ) ] ) );
		}
		
		fclose ( f );
		fclose ( g );
		
		return 0;
		
	}