2158. Amount of New Area Painted Each Day
Treemap + merge intervals.
class Solution {
public int[] amountPainted(int[][] paint) {
TreeMap<Integer, Integer> intervals = new TreeMap<>();
int[] res = new int[paint.length];
for (int i = 0; i < paint.length; i++) {
int start = paint[i][0];
int end = paint[i][1];
int area = end - start;
while (intervals.floorKey(start) != null) {
int prevStart = intervals.floorKey(start);
int prevEnd = intervals.get(prevStart);
if (prevEnd <= start) {
break;
}
area -= Math.min(end, prevEnd) - Math.max(start, prevStart);
start = Math.min(start, prevStart);
end = Math.max(end, prevEnd);
intervals.remove(prevStart);
}
while (intervals.floorKey(end) != null) {
int prevStart = intervals.floorKey(end);
int prevEnd = intervals.get(prevStart);
if (prevEnd <= start) {
break;
}
area -= Math.min(end, prevEnd) - Math.max(start, prevStart);
start = Math.min(start, prevStart);
end = Math.max(end, prevEnd);
intervals.remove(prevStart);
}
res[i] = area;
intervals.put(start, end);
}
return res;
}
}