Pagini recente » Cod sursa (job #1776079) | Cod sursa (job #135059) | Cod sursa (job #2483945) | Cod sursa (job #146948) | Cod sursa (job #1773117)
#include "algorithm"
#include "fstream"
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int INF = 1000000005;
const int NMAX = 100005;
const int LOG_NMAX = 19;
int N, M;
int rmq[LOG_NMAX][NMAX];
int sp[NMAX];
//int extractMinimum(int x, int y, int i, int j) {
//// fout << "i: " << i << ", j: " << j << ", x: " << x << ", y: " << y << "\n";
// if(x <= (j - 1)*(1<<i) + 1 && j*(1<<i) <= y) {
// return rmq[i][j];
// }
//
// int left = INF, right = INF;
// if(x <= (2*j-1)*(1<<(i - 1))) {
// left = extractMinimum(x, y, i - 1, 2*j - 1);
// }
// if((2*j-1)*(1<<(i - 1)) + 1 <= y) {
// right = extractMinimum(x, y, i - 1, 2*j);
// }
// return min(left, right);
//}
int main() {
fin >> N >> M;
int depth = 0;
// int pow = 1;
// sp[1] = 1;
// for(int i = 2 ; i <= N ; i++) {
// if(i == 2 *)
// }
for(int i = 0 ; i < LOG_NMAX ; i++) {
for(int j = 1 ; j < NMAX ; j++) {
rmq[i][j] = INF;
}
}
for(int j = 1 ; j <= N ; j++) {
fin >> rmq[0][j];
}
for(int i = 1 ; (1 << (i-1)) <= N ; i++) {
depth++;
for(int j = 1 ; j + (1<<(i-1)) <= N ; j++) {
// printf("Computing rmq of i: %d, j: %d\n", i, j);
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1<<(i-1))]);
}
}
// for(int i = 0 ; i <= 3 ; i++) {
// for(int j = 1 ; j <= N ; j++) {
// fout << rmq[i][j] << " ";
// }
// fout << "\n";
// }
// fout << "\n";
// fout.flush();
for(int t = 1 ; t <= M ; t++) {
int x, y;
fin >> x >> y;
int k = 0;
while(1 << (k + 1) <= (y - x + 1)) {
k++;
}
// fout << "k is: " << k << "\n";
fout << min(rmq[k][x], rmq[k][y - (1<<k) + 1]) << "\n";
}
}