Pagini recente » Cod sursa (job #2102346) | Cod sursa (job #2200627) | Cod sursa (job #2779546) | Cod sursa (job #2829560) | Cod sursa (job #1100896)
#include <cstdio>
#include <algorithm>
#define Nmax 100005
using namespace std;
int N,v[Nmax],dp[Nmax][20],put[25],prep[Nmax];
inline void Preproces()
{
int i;
put[0]=1;
for(i=1;i<=20;++i)
put[i]=put[i-1]*2;
prep[1]=0;
for(i=2;i<=100000;++i)
{
prep[i]=prep[i-1];
if(i>=put[prep[i]+1])
++prep[i];
}
}
inline void RMQ()
{
int i,j;
for(i=1;i<=N;++i)
dp[i][0]=v[i];
for(i=1;i<=N;++i)
for(j=1;j<=20 && put[j]<=i;++j)
dp[i][j]=min(dp[i][j-1], dp[i-put[j-1]][j-1]);
}
int main()
{
int M,i,t,p,x,y;
freopen ("rmq.in","r",stdin);
freopen ("rmq.out","w",stdout);
Preproces();
scanf("%d%d", &N,&M);
for(i=1;i<=N;++i)
scanf("%d", &v[i]);
RMQ();
while(M--)
{
scanf("%d%d", &x,&y);
t=prep[y-x+1];
p=put[t];
printf("%d\n", min(dp[y][t], dp[x+p-1][t]));
}
return 0;
}