Pagini recente » Cod sursa (job #3274323) | Cod sursa (job #3179172) | Cod sursa (job #2184478) | Cod sursa (job #2763761) | Cod sursa (job #2499902)
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100000
int *preprocess (int *array, int n) {
int *aux, m = (int) sqrt(n);
if (m * m != n) {
m++;
}
aux = new int [m]();
for (int i = 0; i < m; ++i) {
aux[i] = array[i * m];
for (int j = 1; j < m && i * m + j < n; ++j) {
if (aux[i] > array[i * m + j]) {
aux[i] = array[i * m + j];
}
}
}
return aux;
}
int rmq(int *array, int *v, int x, int y, int n) {
int *aux, m = (int) sqrt(n), min, l, r;
if (m * m != n) {
m++;
}
min = array[x];
while (x <= y && x % m != 0) {
if (min > array[x]) {
min = array[x];
}
x++;
}
while (x + m < y) {
if (min > v[x / m]) {
min = v[x / m];
}
x += m;
}
while (x <= y) {
if (min > array[x]) {
min = array[x];
}
x++;
}
return min;
}
int main(int argc, const char * argv[]) {
ifstream in;
ofstream out;
in.open("rmq.in");
out.open("rmq.out");
int N, M, *array, x, y, *p;
in >> N >> M;
array = new int [N];
for(int i = 0; i < N; ++i) {
in >> array[i];
}
p = preprocess(array, N);
for (int i = 0; i < M; ++i) {
in >> x >> y;
out << rmq(array, p, x - 1, y - 1, N) << '\n';
}
in.close();
out.close();
return 0;
}