Pagini recente » Cod sursa (job #1468541) | Cod sursa (job #993265) | preONI 2008 | Cod sursa (job #1617346) | Cod sursa (job #827673)
Cod sursa(job #827673)
#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=0;i<n;++i)
rmq[i][0] = v[i];
for(j=1;(1<<j) <= n;++j)
for(i=0;i + (1<<j)-1< n;++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=0;i<n;++i)
scanf("%d",v+i);
makem();
while(m--)
{
scanf("%d %d",&i,&j);
printf("%d\n",query(i-1,j-1));
}
return 0;
}