Pagini recente » Cod sursa (job #2189205) | Cod sursa (job #3273113) | Cod sursa (job #1981450) | Cod sursa (job #489586) | Cod sursa (job #1977867)
#include <stdio.h>
#include <stdlib.h>
int v[100001];
int r[100001][17];
int log[100001];
int min( int a, int b ) {
if(a>b)
return b;
return a;
}
int query( int a, int b ) {
int l = log[b - a + 1];
return min( r[a + ( 1 << l ) - 1][l], r[b][l] );
}
int main() {
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n, m, i, j, a, b;
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
scanf("%d", &v[i]);
for (i=1;i<=n;i++)
{
r[i][0]=v[i];
for (j=1;(1<<j)<=i;j++)
{
r[i][j] = min(r[i-(1<<(j-1))][j-1], r[i][j-1]);
}
}
log[1]=0;
for (i=2;i<=n;i++)
{
log[i] = 1 + log[i / 2];
}
for ( i = 0; i < m; i++ ) {
scanf("%d%d",&a,&b);
printf("%d\n",query(a,b));
}
return 0;
}