Pagini recente » Cod sursa (job #139804) | Cod sursa (job #541020) | Cod sursa (job #1547122) | Cod sursa (job #2183086) | Cod sursa (job #1674712)
#include <stdio.h>
#include <algorithm>
#define N_MAX 100003
#define MIN(a, b) (a < b ? a : b)
int n, m;
int v[N_MAX];
int rmq[18][N_MAX];
int log[N_MAX];
inline void citire();
inline void calcRmq();
inline void calcLog();
int main()
{
citire();
calcRmq();
calcLog();
int a, b;
for (int i = 1; i <= m; ++i){
scanf("%d%d", &a, &b);
if (a > b) std::swap(a, b);
int l = log[b-a+1];
printf("%d\n", MIN(rmq[l][a],
rmq[l][b - (1 << l) + 1]));
}
return 0;
}
inline void citire(){
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) scanf("%d", v+i);
}
inline void calcRmq(){
int i, j;
for (j = 1; j <= n; ++j) rmq[0][j] = v[j];
for (i = 1; (1 << i) <= n; ++i){
for (j = 1; j + (1 << (i)) <= n + 1; ++j){
rmq[i][j] = MIN(rmq[i-1][j], rmq[i-1][j + (1 << (i - 1))]);
}
}
}
inline void calcLog(){
log[1] = 0;
for (int i = 2; i <= n; ++i) log[i] = log[i/2] + 1;
}