Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
First sort the intervals in descending order by their lower bound, breaking ties in increasing order of their upper bounds. Let
be the length of the longest sequence starting with interval
.
We can see that
, for each interval
completely contained in interval
. If
does not contain any other intervals, then
.
Because of how we sorted the intervals, interval
cannot contain interval
if
. A direct implementation of the above idea has time complexity
and does not get all points.
To efficiently calculate
, we introduce a new array of integers
containing
elements and initialized to zero. The value
tells us the length of the longest sequence starting with an interval whose upper bound is exactly
.
Now the relation
can be expressed as
. In other words, we find the length of the longest sequence whose upper bound is inside
. Again, the lower bound of that interval will also be within
, because the intervals are processed in descending order of lower bounds.
Finally, to efficiently find the largest element in the subsequence of
with indices
, we can use an interval tree or Fenwick tree.
Comments