Pagini recente » Cod sursa (job #2783562) | Cod sursa (job #826214) | Cod sursa (job #1241450) | Cod sursa (job #2208213) | Cod sursa (job #2205663)
#include <bits/stdc++.h>
#define lim 100010
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int v[lim], logaritm[lim], dp[lim][30], n, m;
int main()
{
fin>>n>>m;
for ( int i = 1; i <= n; ++i )
fin>>v[i];
for ( int i = 2; i <= n; ++i )
logaritm[i] = logaritm[i/2]+1;
for ( int i = 1; i <= n; ++i )
dp[i][0] = min(v[i], v[i+1]);
for ( int i = 1; i <= logaritm[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]);
}
}
for ( int i = 1; i <= m; ++i )
{
int x, y;
fin>>x>>y;
if ( x == y )
fout<<v[x]<<'\n';
else
fout<<min(dp[x][logaritm[y-x]], dp[y-(1<<logaritm[y-x])][logaritm[y-x]])<<'\n';
}
}