Pagini recente » Cod sursa (job #1357325) | Cod sursa (job #2649954) | Cod sursa (job #2957650) | Cod sursa (job #2031376) | Cod sursa (job #1197713)
#include <stdio.h>
#define MAXN 100000
#define LG_MAXN 16
int v[MAXN + 1], lg[MAXN + 1], rmq[LG_MAXN + 1][MAXN + 1];
int min2(int a, int b){
return a > b ? b : a;
}
void creatermq (int n){
int i, j;
for (i = 1; i <= n; i++) rmq[0][i] = v[i];
for (i = 1; i <= lg[n]; i++){
for (j = 1; j <= n; j++){
if(j > (1 << (i - 1))){
rmq[i][j] = min2(rmq[i - 1][j], rmq[i - 1][j - (1 << (i - 1))]);
}
}
}
return ;
}
int main()
{
FILE *in = fopen ( "rmq.in", "r" );
int n, m;
fscanf ( in, "%d%d", &n, &m );
int i, k = 0;
for (i = 1; i <= n; i++){
fscanf ( in, "%d", &v[i] );
if (i >= (1 << (k + 1))) k++;
lg[i] = k;
}
creatermq( n );
FILE *out = fopen ("rmq.out", "w");
int L, a, b;
for (i = 1; i <= m; i++ ){
fscanf (in, "%d%d", &a, &b );
L = lg[b - a + 1];
fprintf (out, "%d\n", min2 (rmq[L][a + (1 << L) - 1], rmq[L][b]));
}
fclose (in);
fclose (out);
return 0;
}