Pagini recente » Cod sursa (job #2919081) | Cod sursa (job #313362) | Cod sursa (job #984307) | Cod sursa (job #1339250) | Cod sursa (job #204346)
Cod sursa(job #204346)
#include <cstdio>
long x[17][100000];
long log2[100001];
long min(long a,long b)
{long m,p;
m=x[log2[b-a+1]][a-1];
p=x[log2[b-a+1]][b-(1<<log2[b-a+1])];
if(m<p)return m;
else return p;
}
int main ()
{FILE *fin=fopen("rmq.in","r");
FILE *fout=fopen("rmq.out","w");
long m,n,a,b,i,j,k;
fscanf(fin,"%ld%ld",&n,&m);
for (i=0;i<n;i++)
{fscanf(fin,"%ld",&x[0][i]);}
for (j=1;n>>j;j++)
{for (i=0;(i+(1<<j))<=n;i++)
{if(x[j-1][i]>x[j-1][i+(1<<(j-1))])
{x[j][i]=x[j-1][i+(1<<(j-1))];}
else
{x[j][i]=x[j-1][i];}
}
}
for (i=0;n>>i;i++)
{k=1<<i;
for (j=k;j<2*k&&j<=n;j++)
{log2[j]=i;
}
}//i=0,k=1
for (i=1;i<=m;i++)
{fscanf(fin,"%ld%ld",&a,&b);
fprintf(fout,"%ld\n",min(a,b));
}
fclose(fout);
return (0);
}