Pagini recente » Cod sursa (job #805096) | Cod sursa (job #2513978) | Cod sursa (job #3270880) | Cod sursa (job #528408) | Cod sursa (job #215505)
Cod sursa(job #215505)
#include<stdio.h>
#define NMAX 100024
#define LogN 20
int A[NMAX],LG[NMAX];
int RMQ[LogN][NMAX];
inline int min(const int a,const int b){return a<b?a:b; }
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int N,M;
scanf("%d%d",&N,&M);
int i,j;
for(i=1; i<=N; ++i){
scanf("%d\n",&A[i]);
if( i!=1 )
LG[i]=LG[i>>1]+1;
RMQ[0][i]=A[i];
}
int a1,a2;
for(i=1; (1<<i) <=N; ++i)
{
a1=N-(1<<i)+1;
for(j=1; j<=a1; ++j)
{
a2=1<<(i-1);
RMQ[i][j]=min( RMQ[i-1][j], RMQ[i-1][j+a2] );
}
}
int a3,a4,dif;
while( M-- )
{
scanf("%d%d\n",&a1,&a2);
dif=a2-a1+1;
a3=LG[dif];a4=a1+dif-(1<<a3);
printf("%d\n",min( RMQ[a3][a1], RMQ[a3][a4] ));
}
return 0;
}