Pagini recente » Cod sursa (job #1010599) | Cod sursa (job #1020875) | Cod sursa (job #2743281) | Cod sursa (job #2127448) | Cod sursa (job #1994885)
#include <stdio.h>
#include <stdlib.h>
int v[100000][17];
int log[100001];
inline int min(int a,int b)
{
if(a>b)
return b;
return a;
}
int main()
{
int n,q,i,k,a,b,p;
FILE*fi,*fo;
fi=fopen("rmq.in","r");
fo=fopen("rmq.out","w");
fscanf(fi,"%d%d",&n,&q);
for(i=0;i<n;i++)
{
fscanf(fi,"%d",&v[i][0]);
for(k=1;(1<<k)<i+2;k++)
{
v[i][k]=min(v[i-(1<<(k-1))][k-1],v[i][k-1]);
}
}
for(i=2;i<=100000;i++)
log[i]=1+log[i/2];
for(i=0;i<q;i++){
fscanf(fi,"%d%d",&a,&b);
a--;
b--;
p=log[b-a];
fprintf(fo,"%d\n",min(v[a+(1<<p)-1][p],v[b][p]));
}
fclose(fi);
fclose(fo);
return 0;
}