Pagini recente » Cod sursa (job #2032036) | Cod sursa (job #2154928) | Cod sursa (job #928343) | Cod sursa (job #341544) | Cod sursa (job #1244585)
#include<fstream>
using namespace std;
ifstream fin( "rmq.in" );
ofstream fout( "rmq.out" );
const int nmax = 100000;
const int logmax = 16;
int n, m, d[ nmax + 1 ][ logmax + 1 ];
int pr[ nmax ];
inline int min2( int x, int y ) {
if ( x < y ) {
return x;
} else {
return y;
}
}
int memo( int k ) {
if ( pr[ k ] > 0 ) {
return pr[ k ];
}
if ( k == 1 ) {
return 0;
} else {
return ( pr[ k ] = memo( k / 2 ) + 1 );
}
}
void read() {
fin >> n >> m;
for( int i = 1; i <= n; ++ i ) {
fin >> d[ i ][ 0 ];
}
}
void solve() {
for( int j = 1, p = 1; p <= n; ++ j, p <<= 1 ) {
for( int i = 1; i + p + p - 1 <= n; ++ i ) {
d[ i ][ j ] = min2( d[ i ][ j - 1 ], d[ i + p ][ j - 1 ] );
}
}
pr[ 1 ] = 0;
}
int main() {
int x, y, t;
read();
solve();
for( ; m > 0; -- m ) {
fin >> x >> y;
t = memo( y - x + 1 );
fout << min2( d[ x ][ t ], d[ y - (1 << t) + 1 ][ t ] ) << "\n";
}
fin.close();
fout.close();
return 0;
}