Think of them as double ended priority queues. O(n) construction with O(lgN) mutations. Both the min and max elements are quick to get O(1).
The paper is short and the data structure is elegant. I read it a few years ago in uni and made me appreciate how greatly useful can be implemented very simply.
It is a succinct summary of what, with the benefit of hindsight, many people thought was important in their lives and what they should have done better.
Absent is "I should have worked harder" and "I should have spent more time at the office".
Oh man. This course brings back so many memories of suffering through this material. But I can't emphasize how important this stuff is to know if you want to know anything significant in Computer Science.
What helped me ace the the exam was doing a hundreds of problems. I couldn't answer them most of the time, so I'd need an answer key nearby to get unstuck.
Drill, drill, drill. Just like you'd expect to drill for calculus, you can drill for this class.
What I found helpful was Rosen's "Discrete Mathematics and Its Applications". The material wasn't the best, but the problems are excellent. You can buy an older edition of the book and its solution manual for next to nothing on used book sites like abebooks.com
It is Carleton University's freshman/first year Discrete Structures/Math course (COMP1805). They cover a lot of the same material, but at a more leisure pace and assume a lot less background.
This textbook is being taught as a second year discrete math course at Carleton University. I found it to be really high quality, and on par with similar sections from the Rosen or Epp texts.
Actually, the first class is now Java and C++. Morin isn't teaching Python any more.
"Functional" programming is taught in third year (COMP 3007), but you don't get too deep into it.
My issue with the listed classes isn't the chosen languages. A commenter mentioned that you can learn a lot of functional (and other) concepts in a procedural or object oriented language. My issue is that I basically learned the same concepts over and over again, just using different programming languages. You learn to iterate over a multidimensional array in Java, and then you do so again with C, but you have to deallocate and reallocate, and then you do it in C++, but you create an object for the array. It's all the same stuff.
99% PI is what introduced Kowloon. The show did an amazing job of conveying just how special that place was. It is an great pod cast that captures the majesty of day to day design and architecture.
It is unfortunate that the images don't work on the episode page.
https://www.youtube.com/watch?v=Wkzg8sNkm8Y