Pagini recente » Cod sursa (job #1375629) | Cod sursa (job #2840841) | Cod sursa (job #2899205) | Cod sursa (job #3238285) | Cod sursa (job #1314556)
#include<fstream>
#include<vector>
#include<iostream>
#include<cmath>
#define INF 100005
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
vector<int> A;
int n, Q, l, r;
vector<int> TREE;
void read() {
fin>>n>>Q;
int elem;
A.push_back(0);
TREE.resize(17*n, 0);
for(int i=1; i<=n; i++) {
fin>>elem;
A.push_back(elem);
}
}
void buildTree(int node, int cs, int cd) {
//cout<<"Am apelat buildTree("<<node<<", "<<cs<<", "<<cd<<").\n";
if(cs == cd) {
TREE[node] = A[cs];
return;
}
buildTree(node * 2, cs, (cs + cd)/2);
buildTree(node * 2 + 1, (cs + cd)/2 + 1, cd);
TREE[node] = min(TREE[node*2], TREE[node*2+1]);
}
int rmq (int &left, int &right, int node, int cs, int cd) {
if(cs > right || cd < left) return INF;
if(cs >= left && cd <= right) return TREE[node];
else
return min(
rmq(left, right, node*2, cs, (cs+cd)/2),
rmq(left, right, node*2+1, (cs+cd)/2+1, cd)
);
}
int main() {
read();
buildTree(1, 1, n);
//afisVect(TREE);
for(int i=0; i<Q; i++) {
fin>>l>>r;
fout<<rmq(l, r, 1, 1, n)<<'\n';
}
return 0;
}