Recently, while training for the USACO contest, I realized that I am not very good at ad-hoc and greedy problems. My training have been mainly focused on data structures and complex algorithms, such as Li Chao's Segment Tree and HLD. So this leaves my ad-hoc skills not so good. Take 2021A - Meaning Mean for example. Though I did solve it during the contest, I had no idea how to formulate a proof for my method.
So, are there any tips regarding how to improve skills of this type? Are there any problem lists that I can train on?