Pagini recente » Cod sursa (job #328407) | Cod sursa (job #1766706) | Cod sursa (job #3161003) | Cod sursa (job #2635346) | Cod sursa (job #2375697)
#include <bits/stdc++.h>
#define maxn 100000
#define maxl2 17
using namespace std;
int dp[maxl2+5][maxn+5], v[maxn+5];
int getl2 ( int pin, int n )
{
int l2 = log(n) / log(2);
l2 += ((1<<l2)<n && pin);
return l2;
}
int rmq ( int lo, int hi )
{
int e2 = getl2 (hi-lo+1,0);
return min ( dp[e2][lo], dp[e2][hi-(1<<e2)+1] );
}
int main ()
{
ifstream fin ( "rmq.in" );
ofstream fout ( "rmq.out" );
int n, m; fin >> n >> m;
int i, j, l2 = getl2 (n,1);
for ( i = 0; i < n; i++ ) fin >> v[i], dp[0][i] = v[i];
for ( i = 1; i <= l2; i++ )
for ( j = 0; j < n - (1<<i) + 1; j++ ) dp[i][j] = min ( dp[i-1][j], dp[i-1][j+(1<<(i-1))] );
int lo, hi;
while (m--) fin >> lo >> hi, fout << rmq (lo-1,hi-1) << '\n';
fin.close ();
fout.close ();
return 0;
}