Pagini recente » Cod sursa (job #1857921) | Cod sursa (job #2571396) | Cod sursa (job #1028083) | Cod sursa (job #511320) | Cod sursa (job #2300052)
#include <fstream>
using namespace std;
ifstream fin( "rmq.in" );
ofstream fout( "rmq.out" );
const int K = 20;
const int NMAX = 100005;
int N;
int a[NMAX];
int mat[ NMAX ][ K ];
int lg[ NMAX ];
int nr_q;
void Pre()
{
for( int i = 2; i <= N; ++i )
lg[i] = lg[i / 2] + 1;
for( int i = 1; i <= N; ++i )
mat[i][0] = a[i];
for( int j = 1; j <= K; ++j )
for( int i = 1; i + ( 1 << j ) - 1 <= N; ++i )
mat[i][j] = min( mat[i][j - 1], mat[ i + ( 1 << ( j - 1 ) )][j - 1] );
/*for( int i = 1; i <= N; ++i )
{
for( int j = 0; j <= K; ++j )
fout << mat[i][j] << ' ';
fout << '\n';
}*/
}
void Read()
{
fin >> N >> nr_q;
for( int i = 1; i <= N; ++i )
fin >> a[i];
Pre();
}
void Do()
{
int lf, rg;
int lg_dist;
for( int i = 1; i <= nr_q; ++i )
{
fin >> lf >> rg;
lg_dist = lg[rg - lf + 1];
fout << min( mat[lf][ lg_dist ], mat[rg - ( 1 << lg_dist ) + 1][ lg_dist ] ) << '\n';
}
fout.close();
}
int main()
{
Read();
Do();
return 0;
}