Many problems become easier with offline processing: read all queries first, then answer in a strategic order.
Example: "For each query , count elements in range that are ."
Online: hard (need persistent structures). Offline: sort queries by , sort elements by value. As you increase , add elements to BIT. Answer each query when all relevant elements are added.
# Sort queries by x value
# Sort array elements by value
# Process in order:
# - Add elements with value <= current x
# - Answer queries with current x
This converts a hard problem into simple BIT queries.