Pagini recente » Cod sursa (job #1315127) | Cod sursa (job #2827332) | Cod sursa (job #942156) | Cod sursa (job #182459) | Cod sursa (job #573504)
Cod sursa(job #573504)
#include <cstdio>
#define Nmx 100005
#define Mmx 18
#define min(a,b) (a<b) ? a : b
using namespace std;
int R[Mmx][Nmx],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[0][i]=A[i];
for(int j=1;(1<<j)<=n;++j)
for(int i=1;i<=n-(1<<j)+1;++i)
R[j][i]=min(R[j-1][i],R[j-1][i+(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[l][x],R[l][x+(dif-(1<<l))]));
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
read();
prepro();
solve();
return 0;
}