Pagini recente » Cod sursa (job #2676228) | Cod sursa (job #2634373) | Cod sursa (job #613580) | Cod sursa (job #2330313) | Cod sursa (job #879187)
Cod sursa(job #879187)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, nquery;
fin >> n >> nquery;
vector<int> a(n);
for (int i=0; i<n; ++i) fin >> a[i];
vector<vector<int> > rmq;
rmq.push_back(a);
for (int step=1; 1<<step<n; ++step) {
rmq.push_back(vector<int>(n));
for (int i=0; i<n; ++i) {
int temp=(i+(1<<(step-1)))<n ?rmq[step-1][i+(1<<(step-1))] :1<<30;
rmq[step][i]=min( rmq[step-1][i], temp );
}
}
for (int i=0,low,up; i<nquery; ++i) {
fin >> low >> up;
--low;
int step=0, range=up-low;
while ((1<<step)<range) ++step;
--step;
fout << min(rmq[step][low], rmq[step][up-(1<<step)]) << '\n';
}
return 0;
}