Pagini recente » Cod sursa (job #272234) | Cod sursa (job #51918) | Cod sursa (job #1301793) | Cod sursa (job #2856400) | Cod sursa (job #161474)
Cod sursa(job #161474)
#include <stdio.h>
using namespace std;
long int rmq[18][100002];
long int n, m;
long int lg[18];
long int a[100002];
long int i, j, l;
long int x, y, diff, sh;
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;
}