Pagini recente » Cod sursa (job #1165307) | Cod sursa (job #1852655) | Cod sursa (job #2264965) | Cod sursa (job #2801620) | Cod sursa (job #2817117)
#include <stdio.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize ("unroll-loops")
static inline int min( int a, int b ) {
return ( a <= b ? a : b );
}
static inline int max( int a, int b ) {
return ( a >= b ? a : b );
}
static inline int mod( int x ) {
return x < 0 ? -x : x;
}
FILE *fin;
int poz, valBuff;
static char buff[ ( 1 << 7 ) ];
static inline char nextChar() {
if( poz == valBuff ) {
fread( buff, 1, valBuff, fin );
poz = 0;
}
return buff[ poz++ ];
}
static bool f[ 100 ];
static inline int readInt() {
int rez = 0;
int ch;
while( !f[ ch = nextChar() ] );
do
rez = rez * 10 + ch - '0';
while( f[ ch = nextChar() ] );
return rez;
}
/////////////////////////////////////////////////////////////////////////////////////////////
#define MAX 100000
int rmq[ 17 ][ MAX + 1 ];
int my_log[ MAX + 1 ];
int n;
int main()
{
f[ '0' ] = f[ '1' ] = f[ '2' ] = f[ '3' ] = f[ '4' ] = 1;
f[ '5' ] = f[ '6' ] = f[ '7' ] = f[ '8' ] = f[ '9' ] = 1;
valBuff = sizeof( buff );
fin = fopen( "rmq.in", "r" );
fread( buff, 1, valBuff, fin );
n = readInt();
int q = readInt();
my_log[ 1 ] = 0;
for( int i = 2; i <= n; i++ )
my_log[ i ] = my_log[ i >> 1 ] + 1;
for( int i = 1; i <= n; i++ )
rmq[ 0 ][ i ] = readInt();
register int delta;
for( int i = 1; ( 1 << i ) <= n; i++ ) {
delta = 1 << ( i - 1 );
for( int j = 1; j + delta <= n; j++ )
rmq[ i ][ j ] = min( rmq[ i - 1 ][ j ], rmq[ i - 1 ][ j + delta ] );
}
register int a, b;
FILE *fout = fopen( "rmq.out", "w" );
while( q-- ) {
a = readInt();
b = readInt();
int x = b - a + 1;
int Log2 = my_log[ x ];
fprintf( fout, "%d\n", min( rmq[ Log2 ][ a ], rmq[ Log2 ][ b - ( 1 << Log2 ) + 1 ] ) );
}
return 0;
}