useful data structures and algorithms