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