Pagini recente » Cod sursa (job #1617829) | Cod sursa (job #3209166) | Cod sursa (job #2833231) | Cod sursa (job #1342877) | Cod sursa (job #2254254)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <malloc.h>
using namespace std;
int main() {
int N, M;
int number = 0;
int *numbers;
ifstream in("rmq.in");
ofstream out("rmq.out");
in >> N >> M;
numbers = (int *)malloc(N * sizeof(int));
for (int i = 0; i < N; i++) {
in >> numbers[i];
}
int **l;
l = (int **)calloc(N, sizeof(int*));
for (int i = 0; i < N; i++) {
l[i] = (int *)calloc(N, sizeof(int));
}
for (int i = 0; i < N; i++) {
l[i][0] = i;
}
for (int j = 1; (1 << j) <= N; j++) {
for (int i = 0; (i + (1 << j) - 1) < N ; i++) {
if (numbers[l[i][j - 1]] < numbers[l[i + (1 << (j - 1))][j - 1]]) {
l[i][j] = l[i][j - 1];
} else {
l[i][j] = l[i + (1 << (j - 1))][j - 1];
}
}
}
int left;
int right;
for (int i = 0; i < M; i++) {
in >> left >> right;
left--;
right--;
int j = (int)log2(right - left + 1);
int first = numbers[l[left][j]];
int second = numbers[l[right - (1 << j) + 1][j]];
out << min(first, second) << endl;
}
in.close();
out.close();
free(numbers);
for (int i = 0; i < N; i++) {
free(l[i]);
}
free(l);
return 0;
}