Pagini recente » Cod sursa (job #869128) | Cod sursa (job #3157613) | Cod sursa (job #2132657) | Cod sursa (job #858819) | Cod sursa (job #2139300)
#include <cstdio>
#include <algorithm>
using namespace std;
int n, m;
int sir[100005][20];
int log2(int x){
int y = 1;
int nr = 0;
while(y < x){
y <<= 1;
nr++;
}
return nr - 1;
}
void citire(){
scanf("%d %d", &n, &m);
for(int i = 0; i < n; i++){
scanf("%d", &sir[0][i]);
}
}
void construire(){
int l = log2(n);
for(int i = 1; i <= l; i++){
for(int j = 0; j < n; j++){
sir[i][j] = sir[i - 1][j];
int x = j + (1 << (i - 1));
if(x < n){
sir[i][j] = min(sir[i][j], sir[i - 1][x]);
}
}
}
//
// for(int i = 0; i <= l; i++, printf("\n")){
// for(int j = 0; j < n; j++){
// printf("%d ", sir[i][j]);
// }
// }
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
citire();
construire();
for(int k = 0; k < m; k++){
int x, y;
scanf("%d %d", &x, &y);
x--;
y--;
int d = y - x + 1;
int l = log2(d);
int tmp1 = sir[l][x];
int tmp2 = sir[l][y - (1 << l) + 1];
printf("%d\n", min(tmp1, tmp2));
}
return 0;
}