What is Competitive Programming?
Competitive programming is a mind sport where you'll be given some set of algorithmic challenges and a fairly short amount of time to submit code that produces an exact solution. In this way it's not dissimilar to math competitions, though they are a bit more expansive since you can do more with a computer
How to improve?
Unfortunately, there is no real shortcut. It is not a quick or easy process, the only way to get better is to practice. 'Practice' means solving problems, spending time working through problems and learning how to break down a problem to its core and logically think of the next steps. While it is still important to study theory, practicing problem solving skills should be your main focus.
It's also important to reflect on your time spent when you finish working on a problem.
- How did you arrive at the solution?
- What made you realize something would or wouldn't work?
- If something didn't work why did you not realize the idea didn't work earlier?
- Was this problem too easy?
To draw an analogy, lifting 100 pound weights 500 times won't help you do the 150 pound weights at all. It only makes you better at 100 pound weights, likewise doing easy problems only makes you better at easy problems
If you didn't finish a problem, can't solve it, or are just exhausted
- Was this problem too hard? (have no ideas)
- Was there some data structure or optimization you don't know how to make? (insufficient knowledge)
Again, these aren't easy questions to answer. The process isn't easy and it never will be (it's part of the reason so many of us enjoy it so much), the process of getting better is never ending. If you're ever feeling drained or feel like you stop having fun, it's ok to take breaks. Burnout is a real thing so make sure to take your mental health seriously too :P
Beginner Resources
As a beginner, the most important thing you can do to make the learning experience smoother is to a programming background. Ideally this would be in only C++, java, or python, but only need the basics to actually begin competitive programming. If you're profficient in another language, take some time to learn the basics of one of these (prefer C++).
https://darrenyao.com/
https://train.usaco.org/usacogate
https://usaco.guide/
https://cses.fi/book.pdf
http://usaco.org/index.php?page=contests
Intermediate Resources
By this point you're likely pretty comfortable with a programming language and also used to solving problems. The range of topics in your ability you may encounter is still not so wide and its important to continue practicing problem solving. Most prefer codeforces and atcoder the most, but to each their own. What really matters is that you are doing hard problems
http://cp-algorithms.com/ (a list of algorithms & data structures to refer to)
https://oi-wiki.org/ (in chinese)
Advanced Resources
By this point you likely don't need anyone to give you direction on where and how to practice, or what to study. At this point, some things to consider are to start picking up college texts in math and/or algorithms and beginning to work through these. Likely the ones that are most applicable will be combinatorics or algorithms textbooks. If there's a specific topic related to competitive programming you're interested in usually googling "topic" + codeforces is enough to find something. Check #resources as well. You may also be at the point of reading research papers by well known CS figures and keeping up with modern CS research.
(some personal recommendations for undergrads or advanced high schoolers to get started with higher level math)
Algorithms: CLRS
Lin Alg : Axler
Game Theory: ONAG or Winning Ways
Combo: A course in enumeration
Discete Math Intro: Discrete Math with Ducks
USACO / Problem Trackers
These are meant to be organizational tools to help you track which (olympiad) problems you have or have not solved yet
https://codeforces.com/blog/entry/78158
https://bit.ly/usaco-tracker
http://oichecklist.pythonanywhere.com/ (includes other international olympiads)
https://codetiger.me/project/usaco (estimates of problem difficulties based on users & tracker)
Contests & Sites
There are several national olympiads similar to USACO. You can google around a bit (try to include 'olympiad' or 'informatics' in your search queries). IOI, APIO, CEOI, COCI, JOI are some examples of national/international olympiads. Other than the nationally hosted olympiads (such as USACO), there are several other platforms & companies that host programming competitions. Some of the most popular being
https://codeforces.com/
https://atcoder.jp/
https://www.codechef.com/
https://codingcompetitions.withgoogle.com/
Standard Problem Sets
'Standard' doesn't necessarily mean easy. It means a problem is well studied and has had a known solution for some time now. Often in competitive programming you may find that a problem is very similar to one of these standard problems that you know a solution for or have coded before. To be a stronger competitor, you will at some point be expected to know these concepts instantly and be comfortable coding them.
https://codeforces.com/edu/courses
https://cses.fi/problemset/
https://judge.yosupo.jp/
https://csacademy.com/contest/archive
for more resources: https://github.com/3m4r5/3m4r5/blob/main/Resources/CP.md