#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define se second
#define fi first
using namespace std;
int par[100005];
int root(int x){
if(par[x]==x)return x;
return par[x]=root(par[x]);
}
void merge(int a, int b){
int x=root(a), y=root(b);
par[x]=y;
}
signed main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n, k;
cin>>n>>k;
int t[n+5]={}, ans=n, mx=0, mn=1e9, res=0;
priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>>pq;
for(int i=1; i<=n; i++){
cin>>t[i];
par[i]=i;
if(i!=1)pq.push({t[i]-t[i-1], {i-1, i}});
}
while(!pq.empty()&&ans!=k){
int f=pq.top().fi, g=pq.top().se.fi, h=pq.top().se.se;
pq.pop();
merge(g, h);
ans--;
}
mx=mn=t[1];
for(int i=2; i<=n; i++){
if(root(i)!=root(i-1)){
res+=mx-mn+1;
mx=mn=t[i];
}
mx=max(mx, t[i]);
mn=min(mn, t[i]);
}
res+=mx-mn+1;
cout<<res;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |