Submission #1196536

#TimeUsernameProblemLanguageResultExecution timeMemory
1196536amanthabandStove (JOI18_stove)C++20
50 / 100
1094 ms11760 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>

using namespace std;

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

    vector<vector<int>> arr;
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        arr.push_back({x, x + 1});
    }

    sort(arr.begin(), arr.end());
    vector<vector<int>> ans;
    for (int i = 0; i < n; i++) {
        if (ans.empty() || arr[i][0] > ans.back()[1]) {
            ans.push_back(arr[i]);
        } else {
            ans.back()[1] = max(ans.back()[1], arr[i][1]);
        }
    }

    while ((int)ans.size() > k) {
        int mn = INT_MAX, idx = -1;
        for (int i = 0; i < (int)ans.size() - 1; i++) {
            int gap = ans[i + 1][0] - ans[i][1];
            if (gap < mn) mn = gap, idx = i;
        }
        vector<int> merged = {min(ans[idx][0], ans[idx + 1][0]), max(ans[idx][1], ans[idx + 1][1])};
        ans.erase(ans.begin() + idx);
        ans.erase(ans.begin() + idx);
        ans.insert(ans.begin() + idx, merged);
    }

    int total = 0;
    for (auto& v : ans) total += v[1] - v[0];
    cout << total << endl;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...