Pagini recente » Cod sursa (job #1604286) | Cod sursa (job #680986) | Cod sursa (job #2643955) | Cod sursa (job #813266) | Cod sursa (job #650250)
Cod sursa(job #650250)
#include<stdio.h>
int minim(int a,int b)
{
if(a<b)
return a;
return b;
}
int v[10005][20];
int lg[100005];
int constructie(int n,FILE *fin)
{
int i,k=1,j;
for(i=1;i<=n;i++)
fscanf(fin,"%d",&v[0][i]);
for(i=1;(1<<i)<=n;i++)
for(j=1;j<=n-(1<<i)+1;j++)
{
v[i][j]=minim(v[i-1][j],v[i-1][j+(1<<i-1)]);
}
}
int logaritm(int n)
{
int i;
lg[1]=0;
for(i=2;i<=n;i++)
lg[i]=lg[i/2]+1;
}
int main()
{
FILE *fin,*fout;
fin=fopen("rmq.in","r");
fout=fopen("rmq.out","w");
int x,y,i,k,m,n;
fscanf(fin,"%d%d",&n,&m);
constructie(n,fin);
logaritm(n);
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d",&x,&y);
k=lg[y-x+1];
fprintf(fout,"%d\n",minim(v[k][x],v[k][y+1-(1<<k)]));
}
fclose(fout);
fclose(fin);
}