Pagini recente » Cod sursa (job #1099972) | Cod sursa (job #2838153) | Cod sursa (job #2981275) | Cod sursa (job #2587988) | Cod sursa (job #2708192)
//Ilie Dumitru
#include<cstdio>
int N, M, v[100000], rmq[100000][17];
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(i=0;i<N;++i)
rmq[i][0]=v[i];
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", &v[i]);
preprocesare();
while(M--)
{
scanf("%i", &a);
scanf("%i", &b);
printf("%i\n", solve(a-1, b-1));
}
fclose(stdin);
fclose(stdout);
return 0;
}