Competitive Programming with Common Interview Questions (Recursion, Backtracking and Divide and Conquer Algorithms)