Pagini recente » Cod sursa (job #2121559) | Cod sursa (job #667361) | Cod sursa (job #44408) | Cod sursa (job #188496) | Cod sursa (job #2864293)
#include <fstream>
#define NMAX 100004
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n, m, v[NMAX], log[NMAX], dp[NMAX][20];
void RMQ();
void logaritm();
int main()
{
int L, R;
fin >> n >> m;
for (int i = 1; i <= n; i++)
fin >> v[i];
logaritm();
RMQ();
for (int i = 1; i <= m; i++)
{
fin >> L >> R;
int lg = log[R-L+1];
int I1 = dp[L][lg];
int I2 = dp[R- (1<<lg) +1][lg];
fout << min(I1, I2) << '\n';
}
return 0;
}
void RMQ()
{
for (int i = 1; i <= n; i++)
dp[i][0] = v[i];
for (int j = 1; (1 << j) <= n; j++)
for (int i = 1; i + (1 << j) - 1 <= n; i++)
dp[i][j] = min(dp[i][j-1], dp[i+(1<<(j-1))][j-1]);
}
void logaritm()
{
log[1] = 0;
for (int i = 2; i <= n; i++)
log[i] = log[i/2] + 1;
}