Pagini recente » Cod sursa (job #2326526) | Cod sursa (job #2257828)
#include <bits/stdc++.h>
#define maxn 100000
#define maxl 17
using namespace std;
int dp[maxl+5][maxn+5];
int v[maxn+5];
int getlog2 ( int pin, int n )
{
int lg = log ( n ) / log ( 2 );
if ( pin == 0 && (1<<lg) < n )
lg++;
return lg;
}
int query ( int lo, int hi )
{
int ile = getlog2 ( 1, hi - lo + 1 );
return min ( dp[ile][lo], dp[ile][hi-(1<<ile)+1] );
}
int main ()
{
ifstream fin ( "rmq.in" );
ofstream fout ( "rmq.out" );
int n, t;
fin >> n >> t;
int i;
for ( i = 0; i < n; i++ )
fin >> v[i];
int lg = getlog2 ( 0, n ), j;
for ( i = 0; i <= lg; i++ )
for ( j = 0; j < n; j++ )
dp[i][j] = INT_MAX;
/// linia 0
for ( i = 0; i < n; i++ )
dp[0][i] = v[i];
/// precalc
for ( i = 1; i <= lg; i++ )
for ( j = 0; j < n; j++ )
dp[i][j] = min ( dp[i-1][j], dp[i-1][j+(1<<(i-1))] );
int lo, hi;
for ( i = 0; i < t; i++ )
{
fin >> lo >> hi;
fout << query ( lo - 1, hi - 1 ) << '\n';
}
fin.close ();
fout.close ();
return 0;
}