Pagini recente » Cod sursa (job #70434) | Cod sursa (job #1435715) | Cod sursa (job #266050) | Cod sursa (job #1084461) | Cod sursa (job #2479684)
#include <stdio.h>
#include <stdlib.h>
long int r[20][100005];
long int n,m,st,dr,k;
int main()
{
freopen("rmq.in","r", stdin);
freopen("rmq.out","w", stdout);
/*read*/
scanf("%ld%ld", &n,&m);
for(int i = 1; i <= n; ++i)
scanf("%ld", &r[0][i]);
/*init*/
for(int i = 1; (1<<i) <= n; ++i)
for(int j = 1; j+(1<<(i-1)) <= n; ++j)
r[i][j] = (r[i-1][j] <= r[i-1][j+(1<<(i-1))]) ? r[i-1][j] : r[i-1][j+(1<<(i-1))];
/*solve*/
for(;m;--m){
scanf("%d%d", &st,&dr);
k=0;
long int aux = dr-st+1;
while((1<<k)<=aux)
++k;
--k;
if(r[k][st] < r[k][dr-(1<<(k))+1])
printf("%ld\n", r[k][st]);
else
printf("%ld\n", r[k][dr-(1<<(k))+1]);
}
return 0;
}