Не знаю на счёт других областей, так что пишу только про ACM ICPC и смежные (похожие) так:
Чтоб стать крутым, надо ежедневно по 2-3 часа минимум решать задачи в день.
На всевозможных сайтах агрегаторах задач типа codeforces.ru, opencup.ru, topcoder.com, google codejam, acm.timus.ru и много много других.
Участвовать во всех проходящих онлайн соревнованиях.
Напоминает правило 10 тысяч часов. Есть такое мнение, что люди становятся профессионалами не из-за таланта, а по факту вложения человеко-часов в своё занятие.
Однако, есть и уникумы, по типу Геннадия Короткевича (загугли, почитай).
Лучшим в любой области стать почти невозможно. Однако шанс есть.
Я дальше полуфинала ACM ICPC не проходил, так как был слишком ленив и решал задачи пару раз в месяц.
Ах, совсем забыл: для чемпионства важен опытный тренер. Чтобы не тратить время на всякую чушь, и эффективнее "качаться".
Ещё: я бы предпочел обсуждение с матёрым олимпиадником конкретного алгоритма, чем чтение литературы по онному. Очень важно скорость написания алгоритма, и легкая запоминаемость. Какие-то приёмы по его хорошему модифицированию, если в задаче требуется его мелкая модификация. Чтение кода лидеров тоже не повредит, чтобы понять как элегантнее написать.
Многие простейшие алгоритмы можно написать элегантно и быстро, а можно долго мозговать а тут +1 индекс, или -1. А тут надо сколько прибавить? А условие <= или <. Очень много нюансов.
Так же не повредит психологическая подготовка, если тренер могёт. Так как например меня трижды клинило на ответственных соревнованиях. Дважды на полуфинале ACM ICPC: сидишь как бревно, ничего не соображаешь, переволновался. И один раз на ВКОШП.
Потом как только соревнование кончается (время закончилось), так сразу спадает волнение и начинаешь смотреть на задачи и думать: Что?!?! И это я не смог решить?!?!