fenwick tree
// возвращает индекс, на котором сумма уже больше int lower_bound (int s) { int k = 0; for (int l = logn; l >= 0; l--) { if (k + (1<<l) <= n && t[k + (1<<l)] < s) { k += (1<<l); s -= t[k]; } } return k; }
Source: ru.algorithmica.org
// возвращает индекс, на котором сумма уже больше int lower_bound (int s) { int k = 0; for (int l = logn; l >= 0; l--) { if (k + (1<<l) <= n && t[k + (1<<l)] < s) { k += (1<<l); s -= t[k]; } } return k; }