Maximum Cake Tastiness codeforces solution

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;

    vector<pair<int, int>> cakes(n);
    for (int i = 0; i < n; ++i) {
        cin >> cakes[i].first >> cakes[i].second;
    }

    sort(cakes.begin(), cakes.end(), [](const auto& a, const auto& b) {
        return a.first > b.first;
    });

    long long totalTastiness = 0;
    int remainingPieces = m;

    for (int i = 0; i < n; ++i) {
        if (remainingPieces >= cakes[i].second) {
            totalTastiness += static_cast<long long>(cakes[i].first) * cakes[i].second;
            remainingPieces -= cakes[i].second;
        } else {
            totalTastiness += static_cast<long long>(cakes[i].first) * remainingPieces;
            break;
        }
    }

    cout << totalTastiness << endl;

    return 0;
}