Pagini recente » Cod sursa (job #3172654) | Cod sursa (job #1842097) | Cod sursa (job #1861659) | Cod sursa (job #1446895) | Cod sursa (job #579663)
Cod sursa(job #579663)
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int N = 100001;
const int logN = 20;
int n, m;
int v[logN][N];
void BuildAnswers()
{
for (int i = 1; (1<<i) <= n; ++i)
{
int pow = (1<<(i - 1));
for (int j = 1; j <= (n - pow*2 + 1); ++j)
v[i][j] = min(v[i - 1][j], v[i - 1][j + pow]);
}
}
inline int GetMaxPow(int len)
{
int pow = 0;
while ((1<<(pow + 1)) <= len)
pow++;
return pow;
}
void GetAnswers()
{
while (m--)
{
int a, b;
in >> a >> b;
int pow = GetMaxPow(b - a);
out << min(v[pow][a], v[pow][b - (1<<pow) + 1]) << "\n";
}
}
int main()
{
in >> n >> m;
for (int i = 1; i <= n; ++i)
in >> v[0][i];
BuildAnswers();
GetAnswers();
return 0;
}