Pagini recente » Cod sursa (job #1347091) | Cod sursa (job #2610074) | Cod sursa (job #1988042) | Cod sursa (job #2832458) | Cod sursa (job #2905024)
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
#define MAX 100001
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int nr[MAX], arbore[4*MAX], n, nrOp;
void construireArbore(int r, int l, int pivot) {
if (r == l)
arbore[pivot] = nr[r];
else {
int mij = r + (l - r) / 2;
construireArbore(r, mij, pivot << 1);
construireArbore(mij + 1, l, (pivot << 1) + 1);
arbore[pivot] = min(arbore[pivot << 1],
arbore[(pivot << 1) + 1]);
}
}
int determinareMinim(int a, int b, int r, int l, int pivot) {
if (a <= r and l <= b) {
return arbore[pivot];
} else {
if (a <= l and b >= r) {
int mij = r + (l - r) / 2;
return min(determinareMinim(a, b, r, mij, pivot << 1),
determinareMinim(a, b, mij + 1, l, (pivot << 1) + 1));
}
}
return MAX;
}
int main() {
int pivot, operatie, a, b, r = 1, l;
fin >> n>> nrOp;
l = n;
for (pivot = 1; pivot <= n; pivot += 1) {
fin >> nr[pivot];
}
construireArbore(r, l, 1);
for (pivot = 1; pivot <= nrOp; pivot += 1) {
fin >> a >> b;
fout << determinareMinim(a, b, r, l, 1) << "\n";
}
return 0;
}