Pagini recente » Cod sursa (job #1856074) | Cod sursa (job #357031) | Cod sursa (job #1156633) | Cod sursa (job #54876) | Cod sursa (job #1310591)
#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;
A.resize(n+1, 0);
TREE.resize(log(n)*n + 1, -1);
for(int i=1; i<=n; i++) {
fin>>A[i];
}
}
void afisVect(vector<int> &v) {
for(int i=0; i<v.size(); i++) {
cout<<v[i]<<" ";
}
cout<<endl;
}
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;
}