Pagini recente » Cod sursa (job #3146527) | Cod sursa (job #2820022) | Cod sursa (job #3233) | Cod sursa (job #1939551) | Cod sursa (job #3297309)
#include <stdio.h>
#include <vector>
#include <algorithm>
const int INF = 1e9;
int main() {
FILE *fin = fopen( "rmq.in", "r" );
FILE *fout = fopen( "rmq.out", "w" );
int n, m;
fscanf( fin, "%d%d", &n, &m );
std::vector<int> v(n);
for( int i = 0; i < n; i++ )
fscanf( fin, "%d", &v[i] );
std::vector<std::vector<int>> rmq(17, std::vector<int>(n, +INF));
for( int i = 0; i < n; i++ )
rmq[0][i] = v[i];
for( int l = 1; l < (int)rmq.size(); l++ ){
int half = (1 << (l - 1));
for( int i = 0; i + half < n; i++ )
rmq[l][i] = std::min( rmq[l - 1][i], rmq[l - 1][i + half] );
}
for( int i = 0; i < m; i++ ){
int st, dr;
fscanf( fin, "%d%d", &st, &dr );
st--; dr--;
int l = 31 - __builtin_clz( dr - st + 1 );
fprintf( fout, "%d\n", std::min( rmq[l][st], rmq[l][dr - (1 << l) + 1] ) );
}
fclose( fin );
fclose( fout );
return 0;
}