簡潔データ構造
n ) : r a n k q ( k ) = x } {\displaystyle \mathbf {select} _{q}(x)=\min\{k\in [0\dots n):\mathbf {rank} _{q}(k)=x\}}
ただし、 q ∈ { 0 , 1 } {\displaystyle q\in \{0,1\}} とする。
ある単純な表現方法 では n + o ( n ) {\displaystyle n+o(n)} ビットの領域(元のビット配列と、 o ( n ) {\displaystyle o(n)} の補助データ構造)を使って rank と select を定数時間でサポートできる。この方法はRange Minimum Query(英語版)と似た考え方に基づいており、固定サイズの部分問題に行き着くまでに定数回数の再帰呼び出しだけで済む。ビット配列 B {\displaystyle B} はサイズ l = lg 2  n {\displaystyle l=\lg ^{2}n} の大ブロックとサイズ s = lg  n / 2 {\displaystyle s=\lg n/2} の小ブロックに分割される。大ブロック一つごとに、最初のビットのrankが別の表 R l [ 0 ... n / l ) {\displaystyle R_{l}[0\dots n/l)} に保持される。