Pagini recente » Cod sursa (job #3039794) | Cod sursa (job #1611720) | Cod sursa (job #1896381) | Cod sursa (job #2245014) | Cod sursa (job #2818128)
#include <stdio.h>
#include <algorithm>
using namespace std;
const int MAXN = 1e5;
const int MAXLOG = 17;
int logg[MAXN];
int v[MAXN];
int rmq[MAXLOG+1][MAXN];
int query( int left, int right ) {
int len = logg[right-left+1];
return min( rmq[len][left], rmq[len][right-(1 << len)] );
}
int main() {
FILE *fin, *fout;
int n, m, i, put, left, right;
fin = fopen( "rmq.in", "r" );
fscanf( fin, "%d%d", &n, &m );
for( i = 2; i <= n; i++ )
logg[i] = logg[i/2] + 1;
for( i = 0; i < n; i++ )
fscanf( fin, "%d", &v[i] );
for( i = 0; i < n; i++ )
rmq[0][i] = v[i];
for( put = 1; put <= logg[n]; put++ ) {
for( i = 0; i <= n - ( 1 << put ); i++ )
rmq[put][i] = min( rmq[put-1][i], rmq[put-1][i+(1<<(put-1))] );
}
fout = fopen( "rmq.out", "w" );
for( i = 0; i < m; i++ ) {
fscanf( fin, "%d%d", &left, &right );
fprintf( fout, "%d\n", query( left, right ) );
}
fclose( fout );
return 0;
}