Pagini recente » Cod sursa (job #2315055) | Cod sursa (job #2588496) | Cod sursa (job #2217509) | Cod sursa (job #690982) | Cod sursa (job #154205)
Cod sursa(job #154205)
#include <stdio.h>
#include <string.h>
#define LOG 19
#define NMAX 100100
long a[LOG][NMAX];
long log[NMAX];
long n, m;
void read()
{
long i;
scanf("%ld %ld", &n, &m);
for(i = 1; i <= n; ++i)
scanf("%ld", &a[0][i]);
for(i = 2; i <= n; ++i) log[i] = log[i>>1] + 1;
}
inline long MIN(long a, long b) { return (a < b) ? (a) : (b); }
void pre()
{
long i, j;
for(i = 1; (1 << i) <= n; ++i)
for(j = 1; j <= n - (1 << i)+1; ++j)
a[i][j] = MIN(a[i-1][j], a[i-1][j + (1 << (i-1))]);
}
inline long query(long x, long y)
{
long len = y-x+1, pow = log[len];
return MIN(a[pow][x], a[pow][y-(1<<pow)+1]);
}
int main()
{
long x, y;
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
read();
pre();
while(m--)
{
scanf("%ld %ld", &x, &y);
printf("%ld\n", query(x, y));
}
return 0;
}