Pagini recente » Cod sursa (job #2095699) | Cod sursa (job #1196374) | prosoft-2016/clasament/9 | Cod sursa (job #106467) | Cod sursa (job #2064024)
#include <bits/stdc++.h>
using namespace std;
const int MAX_VAL = 1e5+4;
const int log_MAX_VAL = 19;
int arr[MAX_VAL];
int comp_arr[MAX_VAL][log_MAX_VAL];
int biggest_pwr[MAX_VAL];
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int n, q;
scanf("%d%d", &n, &q);
int k = 1;
for (int i = 0; i < n; i++) {
if ((1<<k) < (i+1)) k++;
biggest_pwr[i+1] = k-1;
scanf("%d", &arr[i]);
}
for (int i = 0; i < n; i++) comp_arr[i][0] = arr[i];
int m = 1;
while ((1<<m) <= n) {
for (int i = 0; i < n-(1<<m)+1; i++)
comp_arr[i][m] = min(comp_arr[i][m-1], comp_arr[i+(1<<(m-1))][m-1]);
m++;
}
for (int i = 0; i < q; i++) {
int fi, la;
scanf("%d%d", &fi, &la);
fi--; la--;
int k = biggest_pwr[la-fi+1];
printf("%d\n", min(comp_arr[fi][k], comp_arr[la-(1<<k)+1][k]));
}
return 0;
}