Since the introduction of retroactive data structures at SODA
2004 [1], a major open question has been the difference between
partial retroactivity (where updates can be made in the past) and full
retroactivity (where queries can also be made in the past). In particular, for
priority queues, partial retroactivity is possible in O(log m) time per
operation on a m-operation timeline, but the best previously known fully
retroactive priority queue has cost Θ(√m log m) time per
operation.

We address this open problem by providing a general logarithmic-overhead
transformation from partial to full retroactivity called “hierarchical
checkpointing,” provided that the given data structure is “time-fusible”
(multiple structures with disjoint timespans can be fused into a timeline
supporting queries of the present). As an application, we construct a fully
retroactive priority queue which can insert an element, delete the minimum
element, and find the minimum element, at any point in time, in O(log2m)
amortized time per update and O(log2m log log m) time per query, using
O(m log m) space. Our data structure also supports the operation of
determining the time at which an element was deleted in O(log2m) time.