Pagini recente » Cod sursa (job #2065176) | Cod sursa (job #2344019) | Cod sursa (job #1346492) | Cod sursa (job #1847857) | Cod sursa (job #813060)
Cod sursa(job #813060)
#include<stdio.h>
FILE*f=fopen("rmq.in","r");
FILE*g=fopen("rmq.out","w");
int n,m,x,y,sol,p[100004],v[100004],a[20][100004];
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for(int i=1;i<=n;++i)
fscanf(f,"%d",&v[i]);
for(int i=2;i<=n;++i)
p[i]=p[i/2]+1;
for(int i=1;i<=n;++i)
a[0][i]=v[i];
for(int i=1;i<=p[n];++i)
for(int j=1;j<=n-(1<<i)+1;++j)
a[i][j]=min(a[i-1][j],a[i-1][j+(1<<(i-1))]);
for(int i=1;i<=m;++i)
{
fscanf(f,"%d%d",&x,&y);
if(x>y)
{
int aux=x;
x=y;
y=aux;
}
int L=y-x+1;
sol=min(a[p[L]-1][x],a[p[L]-1][y-(1<<(p[L]-1))+1]);
fprintf(g,"%d\n",sol);
}
fclose(f);
fclose(g);
return 0;
}