ウホウホゴリラッホ

主に勉強したことをまとめていきます。twitter:@pytran3

STLで二分探索

動機

二度と悲劇を繰り返さないために

f:id:pytran:20190819003540p:plain
悲劇

lower_boundとupper_bound

STLに含まれる両関数、文字通り上界と下界を与える。

  • lower_bound
    • keyより真に大なる区間の下界
  • upper_bound
    • keyより真に小なる区間の上界

例によって左閉半開区間だなと理解したけど、えびちゃんみたいな理解もあるみたい。これもわかる。

signed main() {
  ios::sync_with_stdio(false);
  ll n = 10;
  vector<ll> a(n);
  REP(i, n)  a[i] = i;
  a[2] = 3;
  REP(i, n) cout << i << " ";cout << endl; # index
  REP(i, n) cout << a[i] << " ";cout << endl;
  auto lower = lower_bound(all(a), 3);
  auto upper = upper_bound(all(a), 3);
  cout << lower - a.begin() << endl;
  cout << upper - a.begin() << endl;
  return 0; 
}

/* output
0 1 2 3 4 5 6 7 8 9 
0 1 3 3 4 5 6 7 8 9 
2
4
*/