python において、以下の要件を満たすライブラリを探しています。

  • obj.set(key, val) で key に対して値を store できる。 O(log(N)) で実行できる。
  • obj.get(key) で store した key を取得できる。これが O(log(N)) で実行できる。
  • obj.find_sup(key) で、過去 store した key の中で、今与えられている key より小さいもしくは等しいもののうち最大のものが取得できる。それが O(log(N)) で実行できる。

基本的なデータ構造なので、割と需要は高いと思っていますが、このような要件の時に利用される定番のパッケージはありますか?