Hi Codeforces!
I’ve long believed that it's really worth revisiting the same competitive programming topics multiple times. The first time, you’re just trying to survive and maybe grasp the basics. The second time, you’ve solved some problems, you know where you got confused, and you're ready to absorb more. By the third time, you’ve seen and solved enough to start appreciating the subtleties — the tricks, advanced applications, deeper meaning. But most lectures I’ve seen are designed as a one-size-fits-all — trying to cover everything from scratch and dive into the advanced stuff in one go. That’s rarely optimal.
Take binary search. I once talked about it for six hours straight. A beginner at that lecture would’ve probably quit CP immediately. And that’s ok. Beginners don’t need all that. But the truth is, there is that much depth to explore even in seemingly simple topics like binary search — once you're ready. Yet many people only see the beginner version once and move on. Their understanding stays stuck at that level forever.
FFT is another great example. Almost every FFT lecture I’ve seen tries to do everything in one sitting: start from zero and end with "you now know everything there is to know about FFT and all its applications". But FFT is big, it’s hard. It makes more sense to have:
A basic lecture: just enough to multiply polynomials with minimal pain.
An intermediate one: assume you know the basics, and dive deeper.
And maybe an advanced one: weird tricks, optimizations, cool use cases.
There are many more topics like that: segment trees, square root decomposition, MSTs, etc.
So I’m starting an irregular stream series called "Algorithms in Depth". Each topic will be split by level:
Beginner: minimum viable understanding to start solving problems.
Intermediate: expanding the basic understanding to solve harder problems.
Advanced: deep understanding, fun tricks, and higher-level abstractions.
Most lectures try to combine the beginner and intermediate levels and skip the advanced part completely. I want to keep these levels separate — to not overwhelm beginners, bore intermediates, or neglect the advanced participants. I'm starting with Fast Fourier Transform (FFT). The first stream will cover only the basics. No fancy math. Just the simplest path to fast polynomial multiplication. As much motivation and intuition as possible. If you know what a polynomial is and how to multiply them by hand, you're good to go.
The stream will happen on my youtube channel on Thursday, May 29, 2025 at 14:00 UTC. Everyone’s welcome — ask questions in chat, and the recording will be available afterward. Hope to see you there!











