Pagini recente » Cod sursa (job #2802573) | Cod sursa (job #3125341) | Cod sursa (job #324776) | Cod sursa (job #2973727) | Cod sursa (job #3132621)
#include <fstream>
#include<vector>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
#define maxn 100000
vector<vector<int>> vs;
vector<int> vlg;
vector<int> v;
void build(int n) {
vs.resize(n+1, vector<int>(vlg[n]+1,0));
int i, j;
for (i = 0; i < n; i++) {
vs[i][0] = v[i];
}
for (j = 1; j <= vlg[n]; j++) {
for (i = 0; i <= n - (1 << j); i++) {
vs[i][j] = min(vs[i][j - 1], vs[i + (1 << (j - 1))][j - 1]);
}
}
}
int query(int l, int r) {
int len = r - l + 1;
int k = vlg[len];
return min(vs[l][k], vs[r - (1 << k)+1][k]);
}
int main()
{
int n, m, i, j, n1,n2;
vlg.push_back(0);
vlg.push_back(0);
for (i = 2; i <= 100000; i++) {
vlg.push_back(vlg[i / 2] + 1);
}
cin >> n >> m;
for (i = 0; i < n; i++) {
cin >> n1;
v.push_back(n1);
}
build(n);
for (i = 0; i < m; i++) {
cin >> n1 >> n2;
cout << query(n1 - 1, n2 - 1) << "\n";
}
return 0;
}