Pagini recente » Cod sursa (job #3004670) | Cod sursa (job #53542) | Cod sursa (job #2712203) | Cod sursa (job #2478779) | Cod sursa (job #2664836)
#include <bits/stdc++.h>
using namespace std;
ifstream fin( "rmq.in" );
ofstream fout( "rmq.out" );
const int NMAX = 100005;
int N, Q;
int rmq[NMAX][18];
int lg[NMAX];
void Do() {
for( int j = 1; ( 1 << j ) <= N; ++j )
for( int i = 1; i <= N - ( 1 << j ) + 1; ++i )
rmq[i][j] = min( rmq[i][j - 1], rmq[i + ( 1 << ( j - 1 ))][j - 1] );
for( int i = 2; i <= N; ++i )
lg[i] = lg[i / 2] + 1;
}
int Query( int lf, int rg ) {
int dist = rg - lf + 1;
return min( rmq[lf][lg[dist]], rmq[rg - ( 1 << lg[dist] ) + 1][lg[dist]] );
}
void Read()
{
fin >> N >> Q;
for( int i = 1; i <= N; ++i )
fin >> rmq[i][0];
Do();
for( int i = 1; i <= Q; ++i ) {
int lf, rg;
fin >> lf >> rg;
fout << Query( lf, rg ) << '\n';
}
}
int main()
{
Read();
Do();
return 0;
}