Pagini recente » Cod sursa (job #1756849) | Cod sursa (job #520327) | Cod sursa (job #1642146) | Cod sursa (job #52713) | Cod sursa (job #177228)
Cod sursa(job #177228)
#include<stdio.h>
#define M 100001
int a[20][M],b[M];
long min(long a,long b)
{if(a>b) return b;
return a;
}
int main()
{long n,m,i,x,y,j,p;
FILE*f=fopen("rmq.in","r");
FILE*g=fopen("rmq.out","w");
fscanf(f,"%ld %ld",&n,&m);
for(i=1;i<=n;i++)
{fscanf(f,"%ld",&a[0][i]);
if(i>=2) b[i]=b[i/2]+1;}
for(i=1;i<=b[n];i++)
for(j=1;j+(1<<i)-1<=n;j++)
a[i][j]=min(a[i-1][j],a[i-1][j+(1<<(i-1))]);
for(i=1;i<=m;i++)
{fscanf(f,"%ld %ld",&x,&y);
p=b[y-x+1];
fprintf(g,"%ld\n",min(a[p][x],a[p][y-(1<<p)+1]));}
fcloseall();
return 0;
}