Pagini recente » Cod sursa (job #1166490) | Cod sursa (job #2823654) | Cod sursa (job #2688955) | Cod sursa (job #879330)
Cod sursa(job #879330)
#include <fstream>
#include <iostream>
#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; i<int(rmq.size()); ++i) {
//for (int j=0; j<n; ++j) {
//fout << rmq[i][j] << ' ';
//}
//fout << '\n';
//}
//return 0;
for (int i=0,low,up; i<nquery; ++i) {
fin >> low >> up;
//cout << low << ' ' << up << '\n';
--low;
int step=0, range=up-low;
while ((1<<step)<=range) ++step;
--step;
fout << min(rmq[step][low], rmq[step][up-(1<<step)]) << '\n';
//cout << step;
//cin.get();
}
return 0;
}