Pagini recente » Cod sursa (job #984893) | Cod sursa (job #2175662) | Cod sursa (job #1341101) | Cod sursa (job #965760) | Cod sursa (job #2211522)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int N = 100007;
int rmq[N][20], lololol[N];
int op(int val1, int val2) {
return min(val1, val2);
}
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
cin >> rmq[i][0];
}
for (int lol = 1; (1<<lol) <= n; ++lol) {
int pas = ((1<<lol)>>1);
for (int i = 1; i <= n - pas - pas + 1; ++i) {
rmq[i][lol] = op(rmq[i + pas][lol - 1], rmq[i][lol - 1]);
}
}
for (int i = 2; i <= n; ++i) {
lololol[i] = lololol[i>>1] + 1;
}
int x, y;
for (int i = 0; i < m; ++i) {
cin >> x >> y;
int log = lololol[y - x + 1];
cout << op(rmq[x][log], rmq[y - (1<<log) + 1][log]) << "\n";
}
return 0;
}