Pagini recente » Cod sursa (job #749350) | Cod sursa (job #2864520) | Cod sursa (job #847875) | Cod sursa (job #122251) | Cod sursa (job #2568404)
#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 ( j = 1; ( 1 << j ) - 1 < n; j++ )
for ( i = 0; i < n; i++ )
if ( i + ( 1 << j ) - 1 < n )
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 = y - x + 1;
return mn( r[x][l[len]], r[x + ( len - ( 1 << l[len]) )][l[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 = 0; i < n; i++ )
fscanf( fin, "%d", &r[i][0] );
rmq( n );
for ( i = 0; i < m; i++ ) {
fscanf( fin, "%d%d", &x, &y );
fprintf( fout, "%d\n", query( x - 1, y - 1 ) );
}
fclose( fin );
fclose( fout );
return 0;
}