B. 光之屏障

预处理一下,我们知道 int 范围也就 23112^{31}-1,然后把所有是 2k2^kkk 为整数,且 0k310\le k \le 31)的数全部扔到 vv 里去。那么这个 vv 大概长这样 {1,2,4,8,16,}\{1, 2, 4, 8, 16, \cdots\}

对于每一次询问,我们直接找 vva\ge ab\le b 的数就行了。

#include <bits/stdc++.h>
using namespace std;
vector <int> v;
int main() {
  int t;
  cin >> t;
  int a, b, q = 1;
  for (int i = 1; i <= 32; ++i) {
    v.push_back(q);
    q *= 2;
  }
  while (t--) {
    bool f = 0;
    cin >> a >> b;
    for (int i = 0; i < v.size(); ++i) {
      if (v[i] >= a && v[i] <= b) {
        cout << v[i] << endl;
        f = 1;
        break;
      }
    }
    if (!f) cout << "-1\n";
  }
}