What textbooks includes explanations of advanced data structures found commonly in competitive programming? While looking through some problems on CodeForces, I noticed that there were several problems that required knowledge of techniques that just aren't covered in standard algorithm texts. 

Topics that I want to understand include


segment trees, least common ancestor, range-minimum query
Fenwick trees
heavy-light decomposition
interval trees
Hopcroft–Karp algorithm
implementations of tries
wavelet trees


There doesn't seem to be any book that comprehensively looks at any of those techniques. The only organized resource that I could find was a list of articles on GeeksForGeeks, but much of the site doesn't seem self-contained and linearly ordered the way a textbook would be. It's fine if not all of the techniques I've listed are covered, but I'd prefer a book that covered as much of it as possible. Any help?
Here are two books written especially for competitive programming:


"Guide to Competitive Programming", Antti Laaksonen:

The book is based on the book "Competitive Programmer's Handbook" by
the same author, which was already really good. This handbook is
still available for free on the author's 
website. The commercial version is more comprehensive and contains more topics.
"Competitive Programming 3", by Steven Halim and Felix Halim:

Pretty much the classic book for learning competitive programming.
Maybe a little bit dated.