Pagini recente » Cod sursa (job #197820) | Cod sursa (job #1667698) | Cod sursa (job #2426784) | pt_round11 | Cod sursa (job #161477)
Cod sursa(job #161477)
#include <stdio.h>
using namespace std;
long int rmq[18][100002];
long int n, m;
long int lg[100002];
long int a[100002];
long int i, j, l;
long int x, y, diff, sh;
long int min(long int a, long int b) { return a < b ? a : b; }
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%ld %ld", &n, &m);
for ( i = 1; i <= n; i++ )
scanf("%ld ", &a[i]);
lg[1] = 0;
for ( i = 2; i <= n; i++ )
lg[i]=lg[i/2]+1;
for ( i = 1; i <= n; i++)
rmq[0][i] = a[i];
for ( i = 1; (1 << i) <= n; i++ )
for ( j = 1; j + (1<<i) - 1 <= n; j++ )
{
l = 1<<(i-1);
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+l]);
}
for ( i = 1; i <= m; i++ )
{
scanf("%ld %ld", &x, &y);
diff = y-x+1;
l = lg[diff];
sh = diff - (1<<l);
printf("%ld\n", min(rmq[l][x], rmq[l][x+sh]));
}
return 0;
}