Using monoids with divide and conquer algorithms