Pagini recente » Cod sursa (job #1586250) | Cod sursa (job #1718186) | Cod sursa (job #1391175) | Cod sursa (job #1223099) | Cod sursa (job #2568441)
#include <bits/stdc++.h>
int r[100000][17];
int l[100000];
int mn( int a, int b ) {
return a < b ? a : b;
}
int rmq( int n ) {
int i, j;
for ( i = 1; i <= n; i++ )
for ( j = 1; j <= l[i]; j++ )
r[i][j] = mn( r[i][j - 1], r[i - ( 1 << ( j - 1 ) )][j - 1] );
}
void lg( int n ) {
int i;
for ( i = 2; i <= n; i++ )
l[i] = l[i / 2] + 1;
}
int query( int x, int y ) {
int len = l[y - x + 1];
return mn( r[y][len], r[x + ( 1 << len ) - 1][len] );
}
int main() {
FILE *fin, *fout;
int n, m, i, x, y;
fin = fopen( "rmq.in", "r" );
fout = fopen( "rmq.out", "w" );
fscanf( fin, "%d%d", &n, &m );
for ( i = 1; i <= n; i++ )
fscanf( fin, "%d", &r[i][0] );
lg( n );
rmq( n );
for ( i = 0; i < m; i++ ) {
fscanf( fin, "%d%d", &x, &y );
fprintf( fout, "%d\n", query( x, y ) );
}
fclose( fin );
fclose( fout );
return 0;
}