Pagini recente » Cod sursa (job #1528297) | Diferente pentru problema/matrita intre reviziile 30 si 29 | Diferente pentru problema/gather intre reviziile 13 si 8 | Monitorul de evaluare | Cod sursa (job #2367961)
#include <cstdio>
#define N 100002
#include <iostream>
using namespace std;
FILE *f,*g;
int rmq[20][N],log[N];
int main()
{
f=fopen("rmq.in","r");
g=fopen("rmq.out","w");
int n,m;
fscanf(f,"%d %d",&n,&m);
log[0]=-1;
for(int i=1;i<=n;++i)
fscanf(f,"%d",&rmq[0][i]),log[i]=1+log[i/2];
int p=1;
for(int i=1;i<=log[n];++i)
{
for(int j=1;j+p<=n;++j)
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+p]);
p=p*2;
}
int a,b,dif,lin,sol;
for(int i=1;i<=m;++i)
{
fscanf(f,"%d %d",&a,&b);
dif=b-a+1;
lin=log[dif];
p=(1<<lin);
sol=min(rmq[lin][a],rmq[lin][b-p+1]);
fprintf(g,"%d\n",sol);
}
fclose(f);
fclose(g);
return 0;
}