3218. Minimum Cost for Cutting Cake I

class Solution {
public:
    int minimumCost(int m, int n, vector<int>& horizontalCut, vector<int>& verticalCut)
    {
        sort(horizontalCut.begin(), horizontalCut.end(), greater<int>());
        sort(verticalCut.begin(), verticalCut.end(), greater<int>());

        int hPieces = 0, vPieces = 0;
        int minCost = 0;

        while (hPieces < m - 1 && vPieces < n - 1)
        {
            if (horizontalCut[hPieces] > verticalCut[vPieces])
            {
                minCost += horizontalCut[hPieces++] * (vPieces + 1);
            }
            else
            {
                minCost += verticalCut[vPieces++] * (hPieces + 1);
            }
        }

        while (hPieces < m - 1)
        {
            minCost += horizontalCut[hPieces++] * (vPieces + 1);
        }

        while (vPieces < n - 1)
        {
            minCost += verticalCut[vPieces++] * (hPieces + 1);
        }
        return minCost;
    }
};
  • T: O((m+n)log(m+n))O((m + n) \cdot \log (m + n))
  • S: O(M+N)O(M + N)