Pagini recente » Cod sursa (job #2127171) | Cod sursa (job #2058293) | Cod sursa (job #3260880) | Cod sursa (job #2583029) | Cod sursa (job #1357863)
#include<cstdio>
int n,m,d[100005][31],i,j,k,v[100001],log[100001];
int rmq(int st,int dr)
{
k=log[dr-st+1];
if(v[d[st][k]]<=v[d[dr-(1<<k)+1][k]])
return d[st][k];
return d[dr-(1<<k)+1][k];
}
int main ()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&v[i]);
for(j=0;(1<<j)-1<n;j++)
for(i=0;i+j<n;i++)
{
if(j==0)
d[i][j]=i;
else
if(v[d[i+(1<<j-1)][j-1]]>=v[d[i][j-1]])
d[i][j]=d[i][j-1];
else
d[i][j]=d[i+(1<<j-1)][j-1];
}
log[1]=0;
for(i=2;i<=n;i++)
log[i]=log[i/2]+1;
for(i=1;i<=m;i++)
{
int q,qq;
scanf("%d%d",&q,&qq);
printf("%d\n",v[rmq(q-1,qq-1)]);
}
return 0;
}