Pagini recente » Cod sursa (job #2133541) | Cod sursa (job #223401) | Istoria paginii runda/concurnfo/clasament | Cod sursa (job #489807) | Cod sursa (job #2133563)
#include <bits/stdc++.h>
using namespace std;
const int MAX = 100005;
const int MAX2 = 25;
int Matrix[MAX2][MAX];
int lg[MAX];
int N,M,x,y;
int main()
{
freopen("rmq.in", "r" ,stdin);
freopen("rmq.out" , "w" , stdout);
scanf("%d%d" ,&N , &M);
lg[1] = 0;
for ( int i = 2 ; i <= N ; ++i)
lg[i] = lg[i/2]+1;
for ( int i = 1; i <= N ; ++i)
{
scanf("%d", &Matrix[0][i]);
}
for ( int i = 1; i <= lg[N] ; ++i)
{
for ( int j = 1; j <= N - (1 << (i-1)) ; ++j)
{
Matrix[i][j] = min(Matrix[i-1][j] , Matrix[i-1][j+(1<<(i-1))]);
}
}
for ( int i = 1; i <= M ; ++i)
{
scanf("%d%d" , &x , &y);
int k = lg[y-x+1];
printf("%d\n" ,min(Matrix[k][x] , Matrix[k][y- (1 << k) +1]));
}
}