Pagini recente » Cod sursa (job #3366592) | Cod sursa (job #3366875) | Statistici Jantea Raluca (jantea_raluca) | Cod sursa (job #3366042) | Cod sursa (job #3366658)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m, a, b;
int v[100002], rmq[100002][30], put[100002];
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
fin >> v[i];
for (int j = 0; j < 30; j++) {
rmq[i][j] = 1e9;
}
}
put[1] = 0;
put[2] = 1;
int p = 2, cnt = 1;
for (int i = 3; i <= n; i++) {
if (p * 2 <= i) {
p *= 2;
cnt++;
}
put[i] = cnt;
}
for (int j = 0, lg = 1; lg <= n; j++, lg *= 2) {
for (int i = 1; i <= n - lg + 1; i++) {
if (j == 0) {
rmq[i][j] = v[i];
}
else {
rmq[i][j] = min(rmq[i][j - 1], rmq[i + lg/2][j - 1]);
}
}
}
for (int i = 1; i <= m; i++) {
fin >> a >> b;
int x = put[b - a + 1];
int ans = min(rmq[a][x], rmq[b - (1 << x) + 1][x]);
fout << ans << "\n";
}
}