Pagini recente » Cod sursa (job #2738075) | Cod sursa (job #773216) | Cod sursa (job #1829260) | Cod sursa (job #2942465) | Cod sursa (job #1798702)
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
const int N = 100010;
int n, m, i, j, k, J, x, y, aux, d[N][20], p[N];
int main(){
fin >> n >> m;
for (i = 1; i <= n; ++i) {
fin >> d[i][0];
}
for (i = 2; i < N; ++i) {
p[i] = p[i / 2] + 1;
}
for (j = 1; j <= p[n]; ++j) {
for (i = 1; i <= n; ++i) {
J = j - 1;
d[i][j] = d[i][J];
k = (1 << J);
if (i + k <= n && d[i + k][J] < d[i][j]) {
d[i][j] = d[i + k][J];
}
}
}
for (i = 1; i <= m; ++i) {
fin >> x >> y;
aux = p[y - x + 1];
fout << min(d[x][aux], d[y - (1 << aux) + 1][aux]) << "\n";
}
return 0;
}