Pagini recente » Cod sursa (job #1188583) | Cod sursa (job #1767428) | Cod sursa (job #226627) | Cod sursa (job #1533732) | Cod sursa (job #3312037)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int main () {
int n, m;
fin >> n >> m;
vector<vector<int>> rmq (20, vector<int> (n + 1));
for (int i = 1; i <= n; ++i) {
int x;
fin >> x;
rmq[0][i] = x;
}
for (int p = 1; (1 << p) <= n; ++p) {
for (int i = 1; i <= n; ++i) {
rmq[p][i] = rmq[p - 1][i];
int j = i + (1 << (p - 1));
if (j <= n && rmq[p][i] > rmq[p - 1][j])
rmq[p][i] = rmq[p - 1][j];
}
}
vector<int> e (n + 1);
for (int i = 2; i <= n; ++i)
e[i] = 1 + e[i / 2];
for (int i = 1; i <= m; ++i) {
int st, dr;
fin >> st >> dr;
int put = e[dr - st + 1], x = (1 << put);
fout << min (rmq[put][st], rmq[put][dr - x + 1]) << '\n';
}
return 0;
}