Pagini recente » Cod sursa (job #1624332) | Istoria paginii runda/andrei_15/clasament | Cod sursa (job #1701527) | Cod sursa (job #1072090) | Cod sursa (job #2758888)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
int main(){
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int N, M;
cin >> N >> M;
vector<int> A, log;
vector<vector<int>> rmq;
for(int x, i = 0; i < N; ++i){
cin >> x;
A.push_back(x);
rmq.push_back(vector<int>((int)log2(N) + 1, 0));
rmq[i][0] = x;
}
for(int j = 1; (1 << j) <= N; ++j){
for(int i = 0; i + (1 << j) <= N; ++i)
rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
}
for(int x, y; M > 0; --M){
cin >> x >> y;
--x; --y;
int log = (int)log2(y - x + 1);
cout << min(rmq[x][log], rmq[y - (1 << log) + 1][log]) << "\n";
}
cin.close();
cout.close();
return 0;
}