Divide and conquer algorithm