Sto cercando una struttura di dati che mantenga una tabella intera di dimensione e consenta le seguenti operazioni nel tempo .
- , che aumenta .
- , che diminuisce .
- , che restituisce il numero di indici tale che .
Hai la promessa che ogni chiamata a diminuire può essere abbinata a una chiamata precedente per aumentare con gli stessi parametri . L'applicazione che ho in mente è un algoritmo sweepline per calcolare nel tempo O ( n log n ) l'area dell'unione di n determinati rettangoli rettilinei.
Un quad-albero avrebbe dimensioni , quindi non è una soluzione. Gli alberi Fenwick o Interval hanno il giusto sapore, ma non vedo come estenderli per supportare le operazioni sopra.