Pagini recente » Cod sursa (job #1522480) | Cod sursa (job #603499) | Cod sursa (job #2195698) | Cod sursa (job #790945) | Cod sursa (job #1321986)
#include <fstream>
#include <algorithm>
const int NMAX= 100000;
using namespace std;
ifstream in( "rmq.in" );
ofstream out( "rmq.out" );
int dp[NMAX+1][20], a[NMAX+1], v[NMAX+1];
int main()
{
int N, M;
in >> N >> M;
for( int i= 1; i<=N; ++i )
{
in >> a[i];
}
for( int i= 1; i<=N; ++i )
{
dp[i][0]= a[i];
}
for( int j= 1; ( 1<<j )<=N; ++j )
{
for( int i= 1; i<=N-( 1<<j ) + 1; ++i )
{
dp[i][j]= min( dp[i][ j-1 ], dp[ i + ( 1<<(j-1) ) ][ j-1 ] );
}
}
v[1]=0;
for( int i= 2; i<=N; ++i )
{
v[i]= v[i/2]+1;
}
int x, y, k;
for( int i= 1; i<=M; ++i )
{
in >> x >> y;
k= v[y-x+1];
out << min( dp[x][k] ,dp[ y-( 1<<k )+1 ][k] ) << '\n';
}
return 0;
}