There is a long and thin painting that can be represented by a number line. You are given a 0-indexed 2D integer array paint of length n, where paint[i] = [starti, endi]. This means that on the ith day you need to paint the area between starti and endi.
Painting the same area multiple times will create an uneven painting so you only want to paint each area of the painting at most once.
Return an integer array worklog of length n, where worklog[i] is the amount of new area that you painted on the ith day.
Example 1:
Input: paint = [[1,4],[4,7],[5,8]] Output: [3,3,1] Explanation: On day 0, paint everything between 1 and 4. The amount of new area painted on day 0 is 4 - 1 = 3. On day 1, paint everything between 4 and 7. The amount of new area painted on day 1 is 7 - 4 = 3. On day 2, paint everything between 7 and 8. Everything between 5 and 7 was already painted on day 1. The amount of new area painted on day 2 is 8 - 7 = 1.
Example 2:
Input: paint = [[1,4],[5,8],[4,7]] Output: [3,3,1] Explanation: On day 0, paint everything between 1 and 4. The amount of new area painted on day 0 is 4 - 1 = 3. On day 1, paint everything between 5 and 8. The amount of new area painted on day 1 is 8 - 5 = 3. On day 2, paint everything between 4 and 5. Everything between 5 and 7 was already painted on day 1. The amount of new area painted on day 2 is 5 - 4 = 1.
Example 3:
Input: paint = [[1,5],[2,4]] Output: [4,0] Explanation: On day 0, paint everything between 1 and 5. The amount of new area painted on day 0 is 5 - 1 = 4. On day 1, paint nothing because everything between 2 and 4 was already painted on day 0. The amount of new area painted on day 1 is 0.
Constraints:
1 <= paint.length <= 105paint[i].length == 20 <= starti < endi <= 5 * 104Problem Overview: Each day you paint an interval [start, end) on a long wall. Some sections may already be painted from previous days. For every day, return how much new area gets painted that wasn’t covered before.
Approach 1: Direct Simulation with Painted Array (Brute Force) (Time: O(n * R), Space: O(R))
Track every painted unit using a boolean array representing the wall. For each day’s interval, iterate from start to end - 1. If a position is not painted yet, mark it painted and increase the count for that day. This approach is simple but inefficient when intervals are large because you repeatedly scan already-painted cells. It works only when the coordinate range is small.
Approach 2: Ordered Set / Interval Merging (Time: O(n log n), Space: O(n))
Store previously painted segments in an ordered structure such as a TreeMap, TreeSet, or balanced BST. For a new interval, locate overlapping segments using ordered lookups. Skip regions that are already painted and count only the uncovered parts. Merge overlapping intervals afterward to maintain a disjoint set of painted segments. Each operation involves logarithmic searches and merges, giving overall O(n log n) complexity. This method relies on interval management and ordered traversal, commonly implemented using an Ordered Set.
Approach 3: Segment Tree with Lazy Propagation (Time: O(n log R), Space: O(R))
Model the wall as a range and build a Segment Tree where each node tracks how much of its interval is already painted. For each day, query how many cells are currently painted inside [start, end), then update the segment tree to mark the entire range as painted. The difference between interval length and already-painted cells gives the new area for that day. This structure efficiently supports range queries and updates on large coordinate ranges.
Recommended for interviews: The ordered interval approach is usually the cleanest solution. It shows you understand interval merging, logarithmic lookups, and efficient state tracking using data structures like arrays and ordered maps. Brute force demonstrates the baseline idea, but the ordered structure or segment tree solution shows the optimization interviewers expect.
| Approach | Time | Space | When to Use |
|---|---|---|---|
| Direct Simulation with Painted Array | O(n * R) | O(R) | When coordinate range is very small and implementation simplicity matters |
| Ordered Set / Interval Merging | O(n log n) | O(n) | General case where intervals overlap frequently and efficient merging is required |
| Segment Tree with Lazy Propagation | O(n log R) | O(R) | When the coordinate range is large and many range queries/updates are needed |
AMOUNT OF NEW AREA PAINTED EACH DAY | LEETCODE # 2158 | PYTHON SIMPLE SOLUTION • Cracking FAANG • 5,641 views views
Watch 8 more video solutions →Practice Amount of New Area Painted Each Day with our built-in code editor and test cases.
Practice on FleetCodePractice this problem
Open in Editor