Для обучения C++ и подготовки к соревнованиям по программированию вы можете воспользоваться различными онлайн-ресурсами. Вот несколько рекомендаций:
1. **Codeforces**: Эта платформа предлагает задачи разного уровня сложности, в которых часто используются алгоритмы и структуры данных, типичные для олимпиадного программирования. Здесь проводятся регулярные онлайн соревнования, которые помогут вам подготовиться к реальным олимпиадам.
2. **LeetCode**: Это отличный сайт для практики программирования, который содержит множество задач, ориентированных на собеседования и олимпиадное программирование.
3. **HackerRank**: HackerRank также предоставляет широкий спектр задач по программированию, включая конкурсы с упором на алгоритмы и структуры данных.
4. **TopCoder**: TopCoder — один из старейших сайтов, посвященных соревновательному программированию. Он предлагает задачи, SRMs (одиночные круглые матчи), и TCO (TopCoder Open) — мировой чемпионат.
5. **Coursera** и **edX**: На этих платформах можно найти бесплатные курсы по алгоритмам и структурам данных, которые будут полезны в соревновательном программировании.
6. **GeeksforGeeks**: Хотя это не курс, GeeksforGeeks предлагает множество статей и примеров кода, охватывающих широкий спектр компьютерных наук, в том числе алгоритмы, структуры данных и языки программирования, такие как C++.
7. **YouTube**: На YouTube вы найдете множество каналов, где опытные разработчики проводят туториалы по C++ и алгоритмам. Например, каналы, такие как Codeforces, Tushar Roy - Coding Made Simple, и mycodeschool.
8. **CPPReference**: Сайт содержит справочную информацию и документацию по C++ стандартной библиотеке, что полезно, чтобы глубже понимать возможности языка.
9. **GitHub**: Найдите репозитории с ресурсами, примерами кода, задачами и решениями от других олимпиадных программистов.
10. **CSES Problem Set**: Эта коллекция задач предназначена для практики и изучения алгоритмов. Можно пройти все задачи, систематически улучшая свои навыки.
11. Онлайн курсы, например, от ИТМО и МФТИ на платформе **Stepik**, которые часто содержат направления, связанные с соревнованиями по программированию.
Помимо этого, рекомендуется практиковать темы, связанные с олимпиадным программированием, такие как динамическое программирование, графы, поиск в глубину и в ширину, жадные алгоритмы, структуры данных (кучи, деревья отрезков, дискретное дерево поиска), комбинаторика и теория вероятностей.