Стоит ли тратить большое количество времени и до дыр задрачивать алгоритмы на графах, комбинаторику, сортировки или же делать упор на знание технологий и будет достаточно поверхностного изучения алгоритмов?
Без разницы. Главное ответственно подходить к изучению. В процессе работы недостатки в знаниях будут воссполняться сами собой (по мере поступления задач). Конечно, базовое представление лучше иметь обо всём.
Если Вы выбираете свой карьерный путь, будьте уверены, чтобы Вы не выбрали, придётся много раз пересматривать этот выбор.
Олимпиадное программирование:
- даёт понятие о сложности алгоритмов, оптимизациях и «внутренностях» работы алгоритмов;
- учит быстро принимать решение и писать «шаблонный код» (в хорошем смысле этого понятия);
- учит слаженной командной работе (если соревнования командные, например ACM);
- не даёт никакого понятия об архитектуре, читаемости кода и его поддержке.
Из-за последнего пункта со многими бывшими олимпиадниками сложно работать, пока они не переучатся, а это происходит долго и сложно, т.к. весь их опыт этому противоречит. За счёт того, что такие люди обычно могут держать в голове значительно больший кусок задачи, для коллег работа с их кодом превращается в ад.