Pagini recente » Cod sursa (job #1509556) | Cod sursa (job #128505) | Cod sursa (job #714788) | Cod sursa (job #1113216) | Cod sursa (job #900219)
Cod sursa(job #900219)
#include <cstdio>
#define NMAX 100001
#define LGMAX 18
int N, M, i, j, st, dr, logct;
int D[LGMAX][NMAX];
int Log[NMAX];
inline int MIN( int a, int b )
{
if( a < b ) return a;
return b;
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d%d", &N, &M);
Log[0] = -1;
for( i = 1; i <= N; ++i )
{
scanf("%d", &D[0][i]);
Log[i] = Log[i>>1] + 1;
}
for( i = 1; i <= Log[N]; ++i )
for( j = 1; j <= N - (1<<(i-1)); ++j )
D[i][j] = MIN( D[i - 1][j], D[i - 1][j + (1<<(i-1))] );
while( M-- )
{
scanf("%d%d", &st, &dr);
logct = Log[dr - st + 1];
printf("%d\n", MIN( D[logct][st], D[logct][dr - (1<<logct) + 1] ));
}
return 0;
}