Pagini recente » Cod sursa (job #1740051) | Cod sursa (job #754485) | Cod sursa (job #1380285) | Cod sursa (job #1849980) | Cod sursa (job #3134024)
#include <fstream>
#include <iostream>
#include <math.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int RMQ[17][100001];
int N, M, p, q, x, length;
int main(){
in >> N >> M;
for (int i = 0; i < N; i++){
in >> p;
RMQ[0][i + 1] = p; //punem valorile din vector pe prima linie
}
//construim rmq-ul:
for (int i = 1; 1 << i <= N; i++){
for (int j = 0; j + (1 << i) - 1 <= N; j++)
RMQ[i][j] = min(RMQ[i - 1][j], RMQ[i - 1][j + (1 << (i - 1))]);
}
for (int i = 1; i <= M; i++) {//citim cele m intervale
in >> p >> q;
x = log2(q - p + 1);
//gasim minimul:
out << min(RMQ[x][q + 1 - (1 << x)], RMQ[x][p]) << '\n';
}
in.close();
out.close();
return 0;
}