Pagini recente » Cod sursa (job #454866) | Cod sursa (job #1556278) | Cod sursa (job #2493598) | Cod sursa (job #1587264) | Cod sursa (job #2204350)
#include <stdio.h>
#include <math.h>
unsigned n,m,a[100005][18];
/*
int l2(int i)
{
int j=0;
while(i>1){
j++;
i=i/2;
}
return j;
}
*/
int main()
{
unsigned i,j,k,p,q;
FILE *f,*g;
f=fopen("rmq.in","r");
g=fopen("rmq.out","w");
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=n;i++)
fscanf(f,"%d",&a[i][0]);
for(p=1,q=1;q<n;p++,q*=2)
for(i=1;i<=n-p;i++)
if(a[i][p-1]<a[i+1][p-1])
a[i][p]=a[i][p-1];
else
a[i][p]=a[i+1][p-1];
for(k=1;k<=m;k++)
{
fscanf(f,"%d%d",&i,&j);
p=log2(j-i)+1;q=1<<p-1;
if(i==j)
printf("%d\n",a[i][0]);
else
fprintf(g,"%d\n",a[i][p]<a[j-q][p]?a[i][p]:a[j-q][p]);
}
}