Interview kitsBlog

Your dream job? Lets Git IT.
Interactive technical interview preparation platform designed for modern developers.

XGitHub

Platform

  • Categories

Resources

  • Blog
  • About the app
  • FAQ
  • Feedback

Legal

  • Privacy Policy
  • Terms of Service

© 2026 LetsGit.IT. All rights reserved.

LetsGit.IT/Categories/Data Structures
Data Structureshard

What is a Fenwick tree (Binary Indexed Tree) used for?

Tags
#fenwick#bit#prefix-sum#big-o
Back to categoryPractice quiz

Answer

A Fenwick tree supports prefix sums and point updates in O(log n) with O(n) memory. Use it when you need many updates and queries like “sum of [0..i]” quickly (e.g., frequency/counting problems).

class Fenwick {
  private bit: number[];

  constructor(n: number) {
    this.bit = Array(n + 1).fill(0);
  }

  add(i: number, delta: number) {
    for (let x = i + 1; x < this.bit.length; x += x & -x) this.bit[x] += delta;
  }

  sum(i: number) {
    let res = 0;
    for (let x = i + 1; x > 0; x -= x & -x) res += this.bit[x];
    return res;
  }
}

Advanced answer

Deep dive

Expanding on the short answer — what usually matters in practice:

  • Context (tags): fenwick, bit, prefix-sum, big-o
  • Complexity: compare typical operations (average vs worst-case).
  • Invariants: what must always hold for correctness.
  • When the choice is wrong: production symptoms (latency, GC, cache misses).
  • Explain the "why", not just the "what" (intuition + consequences).
  • Trade-offs: what you gain/lose (time, memory, complexity, risk).
  • Edge cases: empty inputs, large inputs, invalid inputs, concurrency.

Examples

Here’s an additional example (building on the short answer):

class Fenwick {
  private bit: number[];

  constructor(n: number) {
    this.bit = Array(n + 1).fill(0);
  }

  add(i: number, delta: number) {
    for (let x = i + 1; x < this.bit.length; x += x & -x) this.bit[x] += delta;
  }

  sum(i: number) {
    let res = 0;
    for (let x = i + 1; x > 0; x -= x & -x) res += this.bit[x];
    return res;
  }
}

Common pitfalls

  • Too generic: no concrete trade-offs or examples.
  • Mixing average-case and worst-case (e.g., complexity).
  • Ignoring constraints: memory, concurrency, network/disk costs.

Interview follow-ups

  • When would you choose an alternative and why?

Related questions

Data Structures
What is a segment tree and what complexity does it give for range queries and updates?
#segment-tree#range-query#updates
Data Structures
Building a heap from an array: why can it be O(n), not O(n log n)?
#heap#heapify#complexity
Data Structures
  • What production issues show up and how do you diagnose them?
  • How would you test edge cases?
  • Why can a hash table resize cause latency spikes, and how can you mitigate it?
    #hash-table#rehash#latency
    Data Structures
    What is a sparse table and what problems is it good for?
    #sparse-table#rmq#preprocessing
    Data Structures
    What is a segment tree and what is it good for?
    #segment-tree#range-query#big-o
    Data Structures
    What is the heap property in a binary heap?
    #heap#binary-heap#priority-queue