Pagini recente » Cod sursa (job #1836214) | infoarena - comunitate informatica, concursuri de programare | Cod sursa (job #2588989) | Cod sursa (job #864203) | Cod sursa (job #2204390)
#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;2*q<=n;p++,q*=2)
for(i=1;i+2*q-1<=n;i++)
if(a[i][p-1]<a[i+q][p-1])
a[i][p]=a[i][p-1];
else
a[i][p]=a[i+q][p-1];
for(k=1;k<=m;k++)
{
fscanf(f,"%d%d",&i,&j);
p=log2(j-i+1);
if(i==j)
fprintf(g,"%d\n",a[i][0]);
else
{
q=1<<p;
fprintf(g,"%d\n",a[i][p]<a[j-q+1][p]?a[i][p]:a[j-q+1][p]);
}
}
}