Pagini recente » Cod sursa (job #931035) | Cod sursa (job #1911429) | Cod sursa (job #1110693) | Cod sursa (job #1396215) | Cod sursa (job #2026182)
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int v[10001], dp[10001][25], log [10001];
int main()
{
int n, m;
fin>>n>>m;
for ( int i = 1; i <= n; ++i )
fin>>v[i];
int x, y;
for ( int i = 1; i <= n; ++i )
dp[i][0] = min (v[i], v[i+1]);
for ( int i = 2; i <= n; ++i )
log[i] = log[i/2] + 1;
for ( int i = 1; i <= log[n]; ++i )
{
for ( int j = 1; j <=n; ++j )
{
if ( j + (1<<i) > n )
break;
dp[j][i] = min (dp[j][i-1], dp[j+(1<<(i-1))][i-1]);
}
}
while ( m-- )
{
fin>>x>>y;
if ( x == y )
fout<<v[x]<<'\n';
else
fout<<min( dp[x][log[y-x]], dp[y-(1<<log[y-x])][log[y-x]] )<<'\n';
}
}