Pagini recente » Cod sursa (job #330873) | Cod sursa (job #863963) | Cod sursa (job #3153150) | Cod sursa (job #3209066) | Cod sursa (job #1497872)
#include <cstdio>
using namespace std;
const int N=100005;
int rmq[18][N];
int lg[N];
int min(int a,int b)
{
if(a<b)
return a;
else
return b;
}
int main()
{
FILE *in,*out;
in=fopen("rmq.in","r");
out=fopen("rmq.out","w");
int n,m,i,j,pow,k,a,b,dif,l,ras;
fscanf(in,"%d%d",&n,&m);
for(i=1;i<=n;i++)
fscanf(in,"%d",&rmq[0][i]);
for(i=1;1<<i<=n;i++)
{
for(j=1<<i;j<=n;j++)
{
pow=1<<(i-1);
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j-pow]);
}
}
for(i=1;i<=n;i++)
lg[i]=lg[i/2]+1;
for(i=1;i<=n;i++)
lg[i]--;
for(k=1;k<=m;k++)
{
fscanf(in,"%d%d",&a,&b);
dif=b-a+1;
l=lg[dif];
pow=1<<l;
ras=min(rmq[l][b],rmq[l][a+pow-1]);
fprintf(out,"%d\n",ras);
}
return 0;
}