Pagini recente » Cod sursa (job #2226163) | Cod sursa (job #386383) | Cod sursa (job #2063895) | Cod sursa (job #2891375) | Cod sursa (job #3146385)
#include <iostream>
#include <stdio.h>
#define NMAX 100000
#define MAXLOG 17
using namespace std;
int v[NMAX];
int table[NMAX][MAXLOG];
int logg[NMAX];
inline int f( int x, int y ) {
return x < y ? x : y;
}
void calcLog( int n ) {
int i;
logg[1] = 0;
for( i = 2; i <= n; i++ )
logg[i] = logg[i/2] + 1;
}
void build( int n ) {
int i, p;
for( i = 0; i < n; i++ )
table[i][0] = v[i];
for( p = 1; p <= MAXLOG; p++ ) {
for( i = 0; i + ( 1 << p ) - 1 < n; i++ )
table[i][p] = f( table[i][p-1], table[i+(1<<(p-1))][p-1] );
}
}
int query( int l, int r ) {
int len = ( r - l + 1 );
int log = logg[len];
return f( table[l][log],
table[r-(1<<log)+1][log] );
}
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", &v[i] );
calcLog( n );
build( 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;
}