Pagini recente » Istoria paginii utilizator/onofreitudor | Diferente pentru utilizator/rodik_rody intre reviziile 35 si 36 | Istoria paginii utilizator/skz99 | Profil cristinfo | Cod sursa (job #2616096)
#include <fstream>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
int n, m, st, dr, dif, p, minim, p2;
int Min[100001][18];
int main() {
f >> n >> m;
for (int i = 1; i <= n; ++i)
f>> Min[i][1];
for (int d = 1, j = 2; d <= n; d *= 2, ++j) {
for (int i = 1; i + d - 1 <= n; ++i)
Min[i][j] = min(Min[i][j - 1], Min[i + d][j - 1]);
}
for (int i = 1; i <= m; ++i) {
f >> st >> dr;
dif = dr - st + 1;
p = 0; p2 = 1;
while (dif) {
dif /= 2;
++p;
p2 *= 2;
}
p2 /= 2;
minim = min(Min[st][p], Min[dr - p2 + 1][p]);
g << minim << '\n';
}
}