Pagini recente » Cod sursa (job #2004694) | Statistici Maria Titianu (MariaTitianu) | Cod sursa (job #1528464) | Cod sursa (job #1990240) | Cod sursa (job #1164233)
#include <fstream>
using namespace std;
const int MAX = 100101;
const int LGMAX = 17;
int N, M, log[MAX];
int RMQ[LGMAX][MAX];
int main() {
ifstream in("rmq.in");
in >> N >> M;
for(int i = 1, A; i <= N; i++) {
in >> A;
RMQ[0][i] = A;
}
log[1] = 0;
for(int i = 2; i <= N; i++)
log[i] = log[i >> 1] + 1;
for(int lvl = 1; lvl <= log[N]; lvl++)
for(int i = 1; i <= N - (1 << lvl) + 1; i++)
RMQ[lvl][i] = min(RMQ[lvl - 1][i], RMQ[lvl - 1][i + (1 << (lvl - 1))]);
ofstream out("rmq.out");
for(int i = 0; i <= log[N]; i++) {
for(int j = 1; j <= N; j++)
out << RMQ[i][j] << " ";
out << "\n";
}
for(int i = 1, A, B, diff; i <= M; i++) {
in >> A >> B;
diff = B - A + 1;
out << min(RMQ[ log[diff] ][A], RMQ[ log[diff] ][ B - (1 << log[diff]) + 1 ]) << "\n";
} in.close(); out.close();
}