Pagini recente » Cod sursa (job #1563173) | Cod sursa (job #2194063) | Cod sursa (job #2978980) | Cod sursa (job #880093) | Cod sursa (job #666251)
Cod sursa(job #666251)
#include<stdio.h>
#include<vector>
using namespace std;
#define NMAX 100000
#define LMAX 18
long i, j, n, sir[NMAX], rmq[LMAX][NMAX], lg[NMAX], m;
int main()
{
freopen("rmq.in", "rt", stdin);
freopen("rmq.out", "wt", stdout);
scanf("%ld%ld", &n, &m);
lg[1] = 0;
for(i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
for(i = 1; i <= n; i++)
{
scanf("%ld", &sir[i]);
rmq[0][i] = sir[i];
}
long l;
for(i = 1; (1 << i) <= n; i++)
for(j = 1; j <= n - (1 << i) + 1; j++)
{
l = (1 << (i - 1));
if(rmq[i - 1][j] < rmq[i - 1][j + l])
rmq[i][j] = rmq[i - 1][j];
else
rmq[i][j] = rmq[i - 1][j + l];
}
long x, y, dif;
for(i = 1; i <= m; i++)
{
scanf("%ld %ld", &x, &y);
dif = (y - x + 1); l = (1 << lg[dif]);
printf("%ld\n", min(rmq[lg[dif]][x], rmq[lg[dif]][x + (dif - l)]));
}
return 0;
}