Pagini recente » Rezultatele filtrării | Rezultatele filtrării | Statistici Maruseac Mihai (Medivh2deplus) | Rezultatele filtrării | Cod sursa (job #2092026)
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
#define IN "rmq.in"
#define OUT "rmq.out"
#define lg 100003
int n , m;
int rmq[17][lg] , loga[lg];
void Read()
{
int i;
scanf ( "%d%d" , &n , &m );
for ( i = 1 ; i <= n ; i ++ )
scanf ( "%d" , &rmq[0][i]) , loga[i+1] = loga[i/2+1]+1;
loga[1] = 0;
}
void RMQ()
{
int i , j , t;
t = loga[n];
for ( i = 1 ; i <= t ; i ++ )
for ( j = 1 ; j+(1<<(i-1)) < n ; j ++ )
rmq[i][j] = min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
}
void Solve()
{
int i , x , y , d;
for ( i = 1 ; i <= m ; i ++ ){
scanf ( "%d%d" , &x , &y );
d = loga[(y-x+1)];
printf ( "%d\n" , min(rmq[d][x],rmq[d][y-(1<<d)+1]));
}
}
int main()
{
freopen( IN , "r" , stdin );
freopen( OUT , "w" , stdout );
Read();
RMQ();
Solve();
}