#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define el '\n'
const int N = 1e5 + 24;
struct Edge { int u, v; ll w; }; 
int n, k, a[N];
int par[N], sz[N]; ll mn[N], mx[N];
int find(int v) {
    return (par[v] == v ? v : par[v] = find(par[v]));
}
bool merge(int u, int v) {
    u = find(u); v = find(v);
    if (u == v) return 0;
    else {
        if (sz[u] < sz[v]) swap(u, v);
        par[v] = u; sz[u] += sz[v];
        mn[u] = min(mn[u], mn[v]);
        mx[u] = max(mx[u], mx[v]);
        return 1;
    }
}
void solve() {
    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> a[i];
    sort(a + 1, a + n + 1);
    for (int i = 1; i <= n; i++) {
        par[i] = i; sz[i] = 1;
        mn[i] = mx[i] = a[i];
    } 
    vector<Edge> e;
    for (int i = 1; i < n; i++) {
        e.push_back({i, i + 1, a[i + 1] - a[i]});
    }
    sort(e.begin(), e.end(), [](Edge x, Edge y) { 
        return x.w < y.w;
    });
    int cnt = n;
    for (auto [u, v, w]: e) {
        if (cnt == k) break;
        merge(u, v);
        cnt--; 
    }
    ll res = 0;
    for (int i = 1; i <= n; i++) {
        if (find(i) == i) res += mx[i] - mn[i] + 1;
    }
    cout << res << el;
}
signed main() {
    cin.tie(0) -> sync_with_stdio(0);
    int T = 1; // cin >> T;
    while (T--) solve();
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |