#include <bits/stdc++.h>
using namespace std;
#define pii pair<int, int>
#define iii tuple<pii, int, int>
int n, k, t[100000], ans;
pii st[200000];
priority_queue<iii> pq;
pii query(int l, int r) {
pii ret = {0, 0};
for (l += n, r += n; l < r; l >>= 1, r >>= 1) {
if (l&1) ret = max(ret, st[l++]);
if (r&1) ret = max(st[--r], ret);
}
return ret;
}
int main() {
scanf("%d %d\n", &n, &k);
for (int i = 0; i < n; i++) scanf("%d\n", &t[i]); n--;
ans = t[n] - t[0] + 1;
for (int i = 0; i < n; i++) st[i+n] = {t[i+1] - t[i] - 1, i};
for (int i = n-1; i > 0; i--) st[i] = max(st[i<<1], st[i<<1|1]);
pq.push({query(0, n), 0, n});
while (--k && !pq.empty()) {
auto [p, l, r] = pq.top(); pq.pop();
if (p.first <= 0) break;
// cout << p.first << ' ' << p.second << ' ' << l << ' ' << r << '\n';
ans -= p.first;
if (l < p.second) pq.push({query(l, p.second), l, p.second});
if (r > p.second + 1) pq.push({query(p.second + 1, r), p.second + 1, r});
}
printf("%d", ans);
}
Compilation message (stderr)
stove.cpp: In function 'int main()':
stove.cpp:20:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
20 | scanf("%d %d\n", &n, &k);
| ~~~~~^~~~~~~~~~~~~~~~~~~
stove.cpp:21:36: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
21 | for (int i = 0; i < n; i++) scanf("%d\n", &t[i]); n--;
| ~~~~~^~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |