rt 调了一早上,救救孩子吧
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 500000 + 20;
ll n, k, b[N], ans = 0;
bool vis[N];
struct node{
ll val, l, r, id;
bool friend operator < (const node &a, const node &b) {
return a.val > b.val;
}
}a[N];
priority_queue<node> q;
int main (){
scanf("%lld%lld", &k, &n);
for(int i = 1; i <= n; i++) scanf("%lld", &b[i]);
sort(b + 1, b + n + 1);
for(int i = 1; i < n; i++) {
a[i].val = b[i + 1] - b[i];
a[i].l = i - 1, a[i].r = i + 1;
a[i].id = i;
q.push(a[i]);
}
n--;
a[0].val = a[n + 1].val = 1e18 + 1;
for(int i = 1; i <= k; i++) {
node x;
while(!q.empty()) {
x = q.top();
q.pop();
if(vis[x.id] == 0) break;
}
x.val = a[x.id].val;
ans += x.val;
x.l = a[x.id].l;
x.r = a[x.id].r;
vis[x.l] = vis[x.r] = 1;
a[x.id].val = a[x.l].val + a[x.r].val - a[x.id].val;
a[x.id].r = a[x.r].r;
a[x.id].l = a[x.l].l;
a[a[x.l].l].r = x.id;
a[a[x.r].r].l = x.id;
q.push(a[i]);
}
printf("%lld\n", ans);
return 0;
}
/*
2 5
1 2 4 13 15
*/