[How to prepare]
This is a starting point, not a course. Below is the order people take this in, and where to go next. Everything it points at is already on this site or beside it.
The language
Take one language and get fluent in it. Two badly is worse than one well.
C++ is the language of the international olympiads. It is the only one supported at the International Olympiad in Informatics, so anyone heading there moves to it sooner or later. Python is easier to start with and perfectly good for learning to think algorithmically, but on hard problems it runs into its own speed.
If you are just starting, take either and do not spend weeks choosing. If you are already aiming at the international olympiads, take C++.
The algorithms, roughly in this order
The language lets you write a solution down. Finding one is what the algorithms are for, and that is where most of the time goes.
- Syntax, types, loops, functions, input and output
- Arrays and strings; stacks and queues
- Sorting and binary search
- Brute force and greedy algorithms
- Dynamic programming
- Graphs: traversals, shortest paths
- After that — segment trees, number theory, geometry
The first four cover most of what the school round asks. Dynamic programming is the pass where the most people stop, and the only way through it is problems, not reading about it.
Where the problems are
Past problems are already collected, and you do not need to hunt for them.
The Ukrainian olympiads are on uoi.eolymp.space: the national olympiad and the junior and girls’ olympiads, with the statements and automatic judging.
The international ones are on eolymp.com, each olympiad as its own series. The shortest way to the one you want is the olympiad’s own page under Olympiads: the [Problems] link there goes straight to its archive.
For everyday practice there is Tasks, where people solve without tying it to any one olympiad.
Solve problems you cannot yet solve. An hour on one of those is worth a day on ten familiar ones.
What to read
cp-algorithms — a reference for competitive programming algorithms, in English and Ukrainian. The shortest path from the name of an algorithm to a working implementation.
Introduction to Algorithms is a textbook rather than a reference: you read it in order, when you want to understand why an algorithm works and not only how to write it.
Who with
You can get a long way alone, just more slowly. Camps are a few weeks a year among people doing the same thing, taught by people who have already been through it. A coach speeds it up further still: they see what you are stuck on before you do.
If any of this is unclear, start with the frequently asked questions — they explain which olympiads exist and how to get into them.