Pagini recente » Borderou de evaluare (job #492022) | Cod sursa (job #2623693) | Cod sursa (job #1841458) | Cod sursa (job #21007) | Cod sursa (job #523852)
Cod sursa(job #523852)
#include<cstdio>
#define min(a,b) a<b?a:b
using namespace std;
void read(),solve();
int i,j,n,a[20][100010],lg[100010],L,s,x,y,m;
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&a[0][i]);
lg[1]=0;
for(i=2;i<=n;i++)
lg[i]=lg[i>>1]+1;
}
void solve()
{
for(i=1;(1<<i)<=n;i++)
for(j=1;j<=n-(1<<i)+1;j++)
{
L=1<<(i-1);
a[i][j]=min(a[i-1][j],a[i-1][j+L]);
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
L=lg[y-x+1];
s=(y-x+1)-(1<<L);
printf("%d\n",min(a[L][x],a[L][x+s]));
}
}