Pagini recente » Cod sursa (job #766026) | Cod sursa (job #142140) | Cod sursa (job #2558817) | Cod sursa (job #3181777) | Cod sursa (job #2708596)
//Ilie Dumitru
#include<cstdio>
int N, M, rmq[100004][18];
int log(int N)
{
int p=1, c=0;
while(p<=N)
{
c++;
p<<=1;
}
return c-1;
}
int min(int a, int b)
{
return a+(b-a)*(b<a);
}
void preprocesare()
{
int i, j, k=1;
for(j=1;j<N;j<<=1, k++)
for(i=0;i<N-j;++i)
rmq[i][k]=min(rmq[i][k-1], rmq[i+j][k-1]);
}
int solve(int st, int dr)
{
int l=log(dr-st+1);
return min(rmq[st][l], rmq[dr-(1<<l)+1][l]);
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int i, a, b;
scanf("%i", &N);
scanf("%i", &M);
for(i=0;i<N;++i)
scanf("%i", &rmq[i][0]);
preprocesare();
printf("%i ", log(66567));
while(M--)
{
scanf("%i", &a);
scanf("%i", &b);
printf("%i\n", solve(a-1, b-1));
}
fclose(stdin);
fclose(stdout);
return 0;
}