Guide to Competitive Programming

Sawradip
3 min readOct 18, 2020

--

I am trying to start my journey in the field of competitive programming. So while finding guidance, I found this awesome video , containing the total roadmap for someone starting in this field. This post is totally based on that youtube video by take U forward.

Best-Way-To-Start-With-Competitive-Programming-GeeksforGeeks-CP-Live-Course

This post would work as the note for me , as well as all for you. I highly recommend you watch the video as well as follow this post for keeping track of the progress, if you are in the starting, as well as in middle of your competitive programming path.

  1. Do a bunch of pattern printing problems.[start here]
  2. Learn about analysis of time complexity.
  3. Linear search for basic traversal.
  4. Implementing circular array.[article1][article2]
  5. Basic number theory concepts.[article1][article2]
  6. Know about Palindrome and other numbers (Perfect, Armstrong…)
  7. Simple Hashing problems.
  8. Learn prefix sum algorithms. [1d and 2d problems]
  9. Sliding window techniques. **
  10. Learn Binary Search.
  11. Euclidean Algorithm and Extended Euclidean algorithm.
  12. GCD of two numbers in O(n) time.
  13. Linear Diphantine Equation.
  14. Checking primes in O(sqrt(n)) complexity.
  15. Sieve of Eratosthenes
  16. Segmented Sieve.
  17. Find prime factorization of a number in O(lg(n)) using Sieve.
  18. Euler Totient Function [GFG article] [HackerEarth problems]
  19. Fermat Little Theorem[GFG article] [HackerEarth problems]
  20. Wilson’s Theorem[GFG article] [HackerEarth problems]
  21. Finding xⁿ in O(log(n)) time.
  22. Modular Arithmetic
  23. Modular Inverse of a term.
  24. Modular Exponentiation.
  25. Chinese Remainder Theorem
  26. Factorial Modulo Mod.
  27. Finding ⁿCᵣ and ⁿpᵣ for queries.
  28. Inclusion Exclusion principle.[practice combinatrix problems from HackerEarth]
  29. Learn basic sorting Algorithms.
  30. Practice problems which are constructive and have swapping terms.
  31. Problems related to 2-pointer approach.
  32. Bit Manipulation[Left shift] [Right Shift] [Set bit][MSB][LSB]
  33. Power set of given array or a string using Bit.
  34. Number of subarrays with XOR or Zero
  35. Greedy Algorithm Concept and problems
  36. Kadane’s algorithm, Job Sequencing and Activity selection problem
  37. Basic RECURSION PROBLEMS like finding factorials.
  38. Implementing Binary Search
  39. Implementing Modular exponentiation.
  40. Finding subset with given Sum.
  41. Implementing Merge sort , Quick Sort and related problems.
  42. Backtracking problems like Sudoku and N-queen.
  43. Meet in the middle algorithms and problems.
  44. Devide and conquer problems.
  45. Next greater/smaller element using stack
  46. Parenthesis problems using stack.[Archive]
  47. Largest rectangular area in histogram. **important concept
  48. Problems related to Heap(PriorityQueue)
  49. Hashing on string.[Article] [Problems]
  50. Rabin Carp Algorithm
  51. Prefix Function
  52. KMP Algorithm
  53. Z-function
  54. Manachers’ Algorithm
  55. Practice 25–30 problems on previous algorithms.
  56. Tree Algorithms
  57. DFS/BFS Traversal in Graph/Tree
  58. Diameter of Tree
  59. Euler Tour of tree
  60. Finding Lowest Common ancestor(LCA) using Binary Lifting
  61. Distance between two nodes
  62. Finding Lowest Common ancestor(LCA) using Euler Tour
  63. Subtree Problems
  64. Practice 25–30 problems on Tree algorithms.
  65. Graph Algorithms
  66. Connected Components
  67. Topological sort
  68. Cycle Detection in graph
  69. Bipartite Check in graph
  70. Stortest Connected Copmonent using Kosaraju’s Algorithm
  71. dijkstra’s Algorithm
  72. Bellman Ford Algorithm
  73. Floyd Warshall Algorithm
  74. Practice 25–30 problems on these Graph topics.
  75. Bridges in Graph
  76. Articulation point in Graph
  77. Minimum Spanning Tree using Kruskal’s Algorithm
  78. Prim’s Algorithm
  79. 0/1 BFS
  80. Finding Bridges online
  81. Practice 25–30 problems on above Graph topics.
  82. Dynamic Programming [Playlist(Hindi)]
  83. Get yourself strong with recursion before starting.
  84. Understand what is Memoization
  85. Solve common DP problems
  86. Solve AtCoder Educational DP Contest on Dynamic Programming.[All 26 problems]
  87. Solve 20–25 more problems on DP.
  88. Learn recurence for Digit Dynamic Programming[Good Collection]
  89. Dynamic Programming with Bitmasks
  90. Dynamic Programming on Trees
  91. SOS DP[Article]
  92. Practice 40–50 problems on DP
  93. Disjoint Set (Using all optimizations)
  94. Offline Queries using Disjoint set.
  95. Kruskal’s Algorithm
  96. Sparse Table(Not that much important)
  97. Fenwick Tree(Read about Range Update trick also)[Article]
  98. Binary Lifting on Fenwick Trees
  99. Solve 25–30 problems on Disjoint Set and Fenwick Tree.
  100. Matrix Exponentiation (Problems)
  101. Sqrt decomposition technique
  102. Update and query operations
  103. Mo’s Algorithm
  104. Mo’s algorithm on Trees
  105. Segment Tree *important
  106. Range queries and point updates
  107. Lazy Propagation on Segment Trees
  108. Sprague-Grundy Theorems
  109. Flows and Related Problems
  110. Heavy Light Decomposition
  111. Convex Hull Algorithm
  112. FFT/NTT

So, This was a list provided by Striver_79 in the video. I have linked some sources with corresponding points and plan to gradually update the post, with more learning sources, as I follow the list. For now you can use google, as well as his instructions in the video, as learning sources. He has put a lot of effort on this list. Make sure to subscribe his channel TakeUForward.

Have a good day.

--

--

No responses yet