Pagini recente » Cod sursa (job #2031659) | Cod sursa (job #3241157) | Cod sursa (job #2497561) | Cod sursa (job #671530) | Cod sursa (job #2899902)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int nr_elem, nr_intervale, elemente[500001], rmq[500001];
void build_rmq(int left, int right, int node){
if (left == right){
rmq[node] = elemente[left];
return;
}
int middle = left + (right-left)/2;
build_rmq (left, middle, node*2);
build_rmq (middle+1, right, node*2+1);
rmq[node] = min(rmq[2*node], rmq[2*node+1]);
}
int query (int node, int left, int right, int left_interval, int right_interval){
if (left_interval <= left && right <= right_interval)
return rmq[node];
int minim = 1000000, middle = (left + right)/2, aux = 2*node;
if (right_interval > middle)
minim = min(minim, query(aux+1, middle+1, right, left_interval, right_interval));
if (left_interval <= middle)
minim = min(minim, query(aux, left, middle, left_interval, right_interval));
return minim;
}
void read () {
fin >> nr_elem >> nr_intervale;
for (int i = 1; i <= nr_elem; ++i) {
fin >> elemente[i];
}
}
int main() {
read ();
build_rmq(1, nr_elem, 1);
for (int i = 0; i < nr_intervale; ++i) {
int x, y;
fin >> x >> y;
fout << query (1, 1, nr_elem, x, y);
}
return 0;
}