I was wondering what tags were most common for different difficulties, so I wrote a script to calculate this for the ladders on A2OJ. Here are the results, maybe they will help you to know what topics to focus on (first number is the frequency, second number is the tag):

#### Div. 2 A Problems (Ladder 4)

(Avg difficulty: 1038)

73 implementation, 24 brute force, 21 math, 20 greedy, 9 strings, 8 sortings, 7 constructive algorithms, 4 number theory, 3 geometry, 1 dp, 1 dfs and similar, 1 two pointers, 1 graphs, 1 shortest paths, 1 binary search, 1 games, 1 data structures

25 800, 23 1000, 15 900, 10 1200, 10 1100, 5 1300, 4 1400, 2 1600, 1 1500, 1 2000, 1 2400

#### Div. 2 B Problems (Ladder 5)

(Avg difficulty: 1315)

62 implementation, 30 brute force, 28 greedy, 20 math, 13 constructive algorithms, 11 sortings, 10 strings, 7 binary search, 6 bitmasks, 6 geometry, 5 graphs, 5 dp, 5 dfs and similar, 4 number theory, 3 two pointers, 3 data structures, 2 combinatorics, 1 graph matchings, 1 shortest paths, 1 hashing, 1 games, 1 ternary search, 1 probabilities, 1 expression parsing

23 1300, 16 1200, 15 1400, 12 1500, 10 1100, 9 1000, 5 1700, 5 1600, 1 800, 1 900, 1 1800, 1 2100

#### Div. 2 C Problems (Ladder 6)

(Avg difficulty: 1594)

41 implementation, 26 math, 24 greedy, 20 brute force, 16 constructive algorithms, 14 number theory, 13 dfs and similar, 12 dp, 12 sortings, 10 data structures, 9 binary search, 9 combinatorics, 8 graphs, 6 two pointers, 6 strings, 5 geometry, 3 trees, 3 shortest paths, 2 hashing, 2 matrices, 2 expression parsing, 1 dsu, 1 games, 1 bitmasks

21 1700, 21 1600, 14 1500, 10 1400, 8 1800, 6 1300, 5 1900, 5 1200, 5 2000, 1 1000, 1 1100, 1 2100

#### Div. 2 D Problems (Ladder 7)

(Avg difficulty: 1896)

38 dp, 24 implementation, 22 math, 18 greedy, 17 dfs and similar, 16 graphs, 14 data structures, 14 binary search, 13 brute force, 11 constructive algorithms, 9 strings, 9 sortings, 8 trees, 7 shortest paths, 7 two pointers, 5 combinatorics, 5 number theory, 5 probabilities, 5 dsu, 3 bitmasks, 3 hashing, 3 geometry, 3 string suffix structures, 2 divide and conquer, 1 games, 1 flows, 1 ternary search, 1 2-sat, 1 expression parsing, 1 graph matchings

17 1700, 16 1800, 16 2000, 12 1900, 8 1600, 7 2100, 7 2200, 3 1500, 3 2500, 3 2400, 2 1400, 2 2300, 1 1200, 1 2600

#### Div. 2 E Problems (Ladder 8)

(Avg difficulty: 2253)

26 dp, 24 math, 23 data structures, 16 implementation, 16 constructive algorithms, 13 combinatorics, 12 graphs, 12 brute force, 11 greedy, 10 dfs and similar, 10 number theory, 9 binary search, 8 trees, 7 sortings, 6 geometry, 5 dsu, 5 bitmasks, 5 probabilities, 4 flows, 4 shortest paths, 4 games, 4 strings, 3 matrices, 2 ternary search, 2 divide and conquer, 2 hashing, 2 string suffix structures, 1 schedules, 1 two pointers

18 2300, 14 2000, 14 2200, 13 2400, 11 2100, 8 2500, 6 1900, 6 2600, 5 2700, 1 1700, 1 1800

I used the api and tried to get the frequency of tags but the only problem is that it could not differentiate between div1 and div2 hence had to discard it.

Don't write these scripts...another day you would be posting a blog here asking how to improve?

I wrote the script for my own amusement, but then thought others might be curious about the same thing so i posted it.

"another day you would be posting a blog here asking how to improve?". I dont understand what made you come to this conclusion, but even if i did do that, whats wrong with it?