Pagini recente » Cod sursa (job #2511513) | Cod sursa (job #2313991) | Cod sursa (job #1012928) | Cod sursa (job #2946757) | Cod sursa (job #1672656)
#include <cstdio>
using namespace std;
FILE *in,*out;
int rmq[17][100001],n,q,log[100001],p[18];
int main()
{
in=fopen("rmq.in","r");
out=fopen("rmq.out","w");
int i,j,d,x,y;
fscanf(in,"%d%d",&n,&q);
for(i=1;i<=n;++i)fscanf(in,"%d",&rmq[0][i]);
log[1]=0;
for(i=2;i<=n;++i)log[i]=log[i/2]+1;
p[0]=1;
for(i=1;i<=18;++i)p[i]=p[i-1]*2;
for(i=1;p[i]<=n;++i)for(j=1;j<=n-p[i]+1;++j)
{
if(rmq[i-1][j]>rmq[i-1][j+p[i-1]])rmq[i][j]=rmq[i-1][j+p[i-1]];
else rmq[i][j]=rmq[i-1][j];
}
for(i=1;i<=q;++i)
{
fscanf(in,"%d%d",&x,&y);
d=log[y-x];
if(rmq[d][x]>rmq[d][y-p[d]+1])fprintf(out,"%d\n",rmq[d][y-p[d]+1]);
else fprintf(out,"%d\n",rmq[d][x]);
}
fclose(in);fclose(out);
return 0;
}