Learning pathway

I have just started participating in contests ,and i am very new to competitive programming .
I am now confident enough to solve first 1/2 problems in short contests, and 3-4 in long .
I know about recursion, basic data structures implementations . Should i learn more concepts like dfs,bfs and dynammic programming or should i practice more about those implementation,math,number theory,greedy problems ?