Pagini recente » Cod sursa (job #2426847) | Cod sursa (job #2535653) | Cod sursa (job #2631237) | Cod sursa (job #2569047) | Cod sursa (job #1877116)
#include <iostream>
#include <cstdio>
using namespace std;
int range[100010][17];
int v[100010];
int log[100010];
int minim(int x,int y)
{
if(x<y)
return x;
else
return y;
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n,m,i,x,y,step,over;
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++)
{
scanf("%d",&v[i]);
range[i][0]=v[i];
}
for(step=1; step<=16; step++)
for(i=1; i+(1<<step)-1<=n; i++)
range[i][step]=minim(range[i][step-1],range[i+(1<<(step-1))][step-1]);
for(i=1;i<=n;i++)
{
for(step=0;step<=4;step++)
printf("%d ",range[i][step]);
printf("\n");
}
log[1]=0;
for(i=2; i<=n; i++)
log[i]=log[i/2]+1;
for(i=1; i<=m; i++)
{
scanf("%d%d",&x,&y);
over=y-x+1;
printf("%d\n",minim(range[x][log[over]],range[y-(1<<log[over])+1][log[over]]));
}
return 0;
}