Pagini recente » Cod sursa (job #2690615) | Cod sursa (job #911338) | Cod sursa (job #1889733) | Cod sursa (job #466271) | Cod sursa (job #760392)
Cod sursa(job #760392)
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 1001
#define maxlog 11
int n,v[maxn] ;
int m[maxlog][maxn] ;
int t,x,y ;
int rasp(int x,int y)
{
if( x == y )
return v[x] ;
int dif = y - x + 1 ;
int log = 1 ;
int num = 1;
while( num <= dif )
{
++ log ;
num *= 2 ;
}
num /= 2 ;
-- log ;
return min ( m[log][ y - num + 1 ] , rasp(x , y - num + 1 ) ) ;
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&t);
for(int i=1;i<=n;++i)
{
scanf("%d",&v[i]);
m[1][i] = v[i] ;
}
int pas = 1 ;
int lin = 2 ;
while( 1 + pas <= n )
{
for(int i=1;i<=n;++i)
{
if( i + pas > n )
m[lin][i] = m[lin-1][i] ;
else
m[lin][i] = min ( m[lin-1][i] , m[lin-1][i+pas] ) ;
}
pas *= 2 ;
++ lin ;
}
++t ;
while( -- t )
{
scanf("%d%d",&x,&y);
printf("%d\n",rasp(x,y));
}
return 0;
}