Pagini recente » Cod sursa (job #1833419) | Cod sursa (job #2496396) | Cod sursa (job #1603860) | Cod sursa (job #2044712) | Cod sursa (job #2080295)
#include <stdio.h>
using namespace std;
#define min(x,y) ( (x<y) ? x : y )
#define NMAX 100005
#define lgNMAX 20
int N, M, i, j, a, b;
int lg[lgNMAX], D[lgNMAX][NMAX];
void RMQ_preparing ()
{
lg[1] = 0;
for(i = 2 ; i <= N ; ++i)
lg[i] = lg[i/2] + 1;
for(i = 1 ; i <= lg[N] ; ++i)
for(j = 1 ; j <= N ; ++j)
D[i][j] = min( D[i-1][j], D[i-1][j+(1<<(i-1))] );
}
int query(int x,int y)
{
int k = lg[y-x+1];
return min( D[k][x], D[k][y-(1<<k)+1] );
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d", &N, &M);
for(int i = 1 ; i <= N ; ++i)
scanf("%d", &D[0][i] );
RMQ_preparing();
for(int i = 1 ; i <= M ; ++i)
{
scanf("%d %d", &a, &b);
printf("%d\n", query(a,b) );
}
return 0;
}