3
vector<bitset<101>> tree;4
vector<int> minDifference(vector<int> &nums, vector<vector<int>> &queries) {7
tree = vector<bitset<101>>(4 * (n + 1) + 1);8
buildtree(1, 0, n - 1, nums);11
for (auto &e : queries) {12
auto finalOnesRepresentations = query(1, 0, n - 1, e[0], e[1]);16
while (i < 101 and finalOnesRepresentations[i] != 1) {23
// find the minimum gap24
for (; i < 101; i++) {25
if (finalOnesRepresentations[i] == 1) {26
gap = min(gap, i - prev);30
ans.push_back(gap == INT_MAX ? -1 : gap);35
bitset<101> query(int index, int s, int e, int qs, int qe) {36
if (s > e) return bitset<101>();37
if (e < qs || s > qe) return bitset<101>();38
if (qs <= s and e <= qe) return tree[index];40
int mid = (s + e) / 2;41
auto left = query(index * 2, s, mid, qs, qe);42
auto right = query(index * 2 + 1, mid + 1, e, qs, qe);46
void buildtree(int index, int s, int e, vector<int> &a) {56
int mid = (s + e) / 2;57
buildtree(index * 2, s, mid, a);58
buildtree(index * 2 + 1, mid + 1, e, a);59
tree[index] = tree[index * 2] | tree[index * 2 + 1];