sclass RandomizerFromHistogram implements IF0 {
LPair list;
transient Random randomizer = defaultRandomizer();
*(MultiSet ms) {
long sum = 0;
for (A a : keys(ms)) {
int val = ms.get(a);
if (val == 0) continue;
sum += val;
list.add(pair(a, sum));
}
}
public A get() {
if (empty(list)) null;
long val = randomLong(randomizer, last(list).b);
int idx = generalizedBinarySearch2(list, p -> cmp(p.b, val));
if (idx < 0) {
print("idx1: " + idx);
idx = -idx-1;
}
print("idx: " + idx);
ret assertNotNull(pairA(_get(list, idx)));
}
}