Pagini recente » Cod sursa (job #1471868) | Cod sursa (job #1055834) | Cod sursa (job #1724628) | Cod sursa (job #2270282) | Cod sursa (job #2374010)
#include <fstream>
using namespace std;
ifstream fin( "rmq.in" );
ofstream fout( "rmq.out" );
const int NMAX = 100005;
int N, M;
int a[NMAX];
int lg[NMAX];
int rmq[20][NMAX];
void Read()
{
fin >> N >> M;
for( int i = 1; i <= N; ++i )
fin >> a[i];
}
void Do()
{
for( int i = 1; i <= N; ++i )
rmq[0][i] = a[i];
for( int i = 1; ( 1 << i ) <= N; ++i )
{
for( int j = 1; j + ( 1 << i ) - 1 <= N; ++j )
rmq[i][j] = min( rmq[i - 1][j], rmq[i - 1][j + ( 1 << ( i - 1 ) ) ] );
}
lg[2] = 1;
for( int i = 3; i <= N; ++i )
lg[i] = lg[i / 2] + 1;
int x, y, lgi;
int logg;
for( int i = 1; i <= M; ++i )
{
fin >> x >> y;
lgi = y - x + 1;
logg = lg[lgi];
fout << min( rmq[logg][x], rmq[logg][ y - ( 1 << logg ) + 1 ] ) << '\n';
}
}
int main()
{
Read();
Do();
return 0;
}