Pagini recente » Cod sursa (job #676571) | Cod sursa (job #2181305) | Cod sursa (job #2390425) | Cod sursa (job #1851614) | Cod sursa (job #186592)
Cod sursa(job #186592)
#include <stdio.h>
#define maxn 100010
#define min(a, b) a<b ? a:b
long a[maxn], m[maxn][18], lo[maxn];
//long logaritm(long );
//int count(long );
int main()
{
long n, m1, x, y, i, j;
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%ld %ld", &n, &m1);
for(i=1; i<=n; ++i)
{
scanf("%ld", &a[i]);
}
lo[1]=0;
for(i=1; i<=n; i++)
lo[i]=lo[i/2]+1;
for(i=1; i<=n; i++)
m[i][0]=a[i];
for(j=1; (1<<j) <= n; j++)
for(i=1; i+ (1 << (j-1)) <=n; i++)
m[i][j]=min(m[i][j-1], m[i+(1<<(j-1))][j-1]);
for(i=1; i<=m1; i++)
{
scanf("%ld %ld", &x, &y);
long k=lo[y-x];
printf("%ld\n", min(m[x][k], m[y-(1<<k)+1][k]));
}
return 0;
} /*
long logaritm(long n)
{
n=n|(n>>1);
n=n|(n>>2);
n=n|(n>>4);
n=n|(n>>8);
n=n|(n>>16);
return count(n);
}
int count(long n)
{
int nr=0;
if(n)
while(n&=n-1) nr++;
return nr;
} */