Pagini recente » Cod sursa (job #3203980) | Cod sursa (job #552143) | Cod sursa (job #2829360) | Cod sursa (job #3250117) | Cod sursa (job #827677)
Cod sursa(job #827677)
#include <cstdio>
using namespace std;
int n,m;
int v[100005];
inline int min(int a,int b)
{
if(a<b)
return a;
return b;
}
int rmq[100005][18];
void makem()
{
int i,j;
for(i=1;i<=n;++i)
rmq[i][0] = v[i];
for(j=1;(1<<j) <= n;++j)
for(i=1;i + (1<<j)<= n + 2;++i)
rmq[i][j] = min(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
}
int query(int a,int b)
{
int k;
for(k=0;(1<<k)<=(b-a+1);++k);
--k;
return min(rmq[a][k],rmq[b-(1<<k)+1][k]);
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
int i,j;
for(i=1;i<=n;++i)
scanf("%d",v+i);
makem();
while(m--)
{
scanf("%d %d",&i,&j);
printf("%d\n",query(i,j));
}
return 0;
}