Pagini recente » Cod sursa (job #2101000) | Cod sursa (job #1085584) | Cod sursa (job #2412897) | Cod sursa (job #2622778) | Cod sursa (job #573475)
Cod sursa(job #573475)
#include <cstdio>
#define Nmx 200002
#define Mmx 38
#define min(a,b) (a<b) ? a : b
using namespace std;
int R[Nmx][Mmx],m,n;
int A[Nmx],lg[Nmx];
void read()
{
scanf("%d%d",&n,&m);
lg[1]=0;
for(int i=1;i<=n;++i)
{
scanf("%d",&A[i]);
if(i==1) continue;
lg[i]=lg[i/2]+1;
}
}
void prepro()
{
for(int i=1;i<=n;++i)
R[i][0]=A[i];
for(int j=1;(1<<j)<=n;++j)
for(int i=1;i<=n;++i)
R[i][j]=min(R[i][j-1],R[i+(1<<(j-1))][j-1]);
}
void solve()
{
int l,dif,x,y;
for(;m;m--)
{
scanf("%d%d",&x,&y);
dif=(y-x+1);
l=lg[dif];
printf("%d\n",min(R[x][l],R[x+(dif-(1<<l))][l]));
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
read();
prepro();
solve();
return 0;
}