Submission #977955

#TimeUsernameProblemLanguageResultExecution timeMemory
977955kilkuwuStove (JOI18_stove)C++17
100 / 100
25 ms2468 KiB
#include <bits/stdc++.h>

#define nl '\n'

signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  int N, K;
  std::cin >> N >> K;

  std::vector<int> T(N);
  for (int i = 0; i < N; i++) {
    std::cin >> T[i];
  }

  std::sort(T.begin(), T.end());

  // split em into K parts such that a - b + .... + b - a
  // dp[i][k] = a[i] + 1 + min(dp[j][k - 1] - a[j + 1])
  // dp[i][k] = // slope trick ? 

  // dp[i][k] = // e
  // O(k * n) is easy
  // -a[j + 1] + a[j]
  // a[1] + a[n]
  // getting the k smallest lol

  std::priority_queue<int, std::vector<int>, std::greater<int>> pq;

  for (int i = 0; i + 1 < N; i++) {
    pq.push(T[i] - T[i + 1] + 1);
  }

  // 2 - 3
  // 4 - 6
  // -1 
  // -2

  int ans = T[N - 1] + 1 - T[0];

  // minimal lol

  K--;
  while (K > 0 && pq.size() && pq.top() < 0) {
    ans += pq.top();
    pq.pop();
    K--;
  }

  std::cout << ans << nl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...