Pagini recente » Cod sursa (job #219362) | Cod sursa (job #1163049) | Cod sursa (job #2287297) | Cod sursa (job #1318774) | Cod sursa (job #161537)
Cod sursa(job #161537)
# include <stdio.h>
# include <cmath>
using namespace std;
# define input "rmq.in"
# define output "rmq.out"
# define max 1001
# define min(a,b) (a<b?a:b)
int x,y,i,j,n,m,a[max][65],k;
int main()
{
freopen(input,"r", stdin);
freopen(output, "w", stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i][0]);
}
k=1;
while(1<<k <= n) k++;
k--;
for(j=1;j<=k;j++)
for(i=1;i<=n;i++)
{
a[i][j] = a[i][j-1];
if( i + (1 << (j - 1)) <=n && a[i+ (1 << (j - 1))][j-1] < a[i][j]) a[i][j] = a[i+ (1 << (j - 1))][j-1];
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
if(x == y)
printf("%d\n",a[x][0]);
int e=y-x;
k = floor(log(e)/log(2));
printf("%d\n",min(a[x][k],a[y-(1<<k)+1][k]));
}
return 0;
}