Submission #1196534

#TimeUsernameProblemLanguageResultExecution timeMemory
1196534amanthabandStove (JOI18_stove)C++20
50 / 100
1095 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 (ans.size() > k) {
        int mn = INT_MAX;
        int 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);
    }

    // Print result
    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...