https://www.hackerrank.com/challenges/service-lane
用RMQ做的,其实暴力也能过~
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
int n, t;
cin >> n >> t;
vector<int> vec(n);
for (int i = 0; i < n; i++) {
cin >> vec[i];
}
vector<vector<int>> m(n);
for (int i = 0; i < n; i++) {
m[i].resize(10);
}
for (int d = 0; d < 10; d++) {
for (int i = 0; i < n; i++) {
if (d == 0) {
m[i][d] = vec[i];
} else {
m[i][d] = m[i][d - 1];
int subd = (int)pow(2, d - 1);
int j = i + subd;
if (j + subd <= n)
m[i][d] = min(m[i][d - 1], m[j][d - 1]);
}
}
}
while (t--) {
int a, b;
cin >> a >> b;
int diff = (b - a + 1);
int d = 0;
int len = 1;
for (; len <= diff; len*=2, d++);
d--;
len /= 2;
int x = min(m[a][d], m[b - len + 1][d]);
cout << x << endl;
}
return 0;
}