记录编号 |
578496 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
[CTSC 2007]数据备份 |
最终得分 |
100 |
用户昵称 |
ムラサメ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.148 s |
提交时间 |
2023-03-22 14:32:49 |
内存使用 |
2.68 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int d[100010],l[100010],r[100010],v[100010];
int n,k,last,ans=0;
bool vis[100010];
priority_queue<pair<int,int> >q;
int main(){
freopen("Backup.in","r",stdin);
freopen("Backup.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>k>>last;
int tmp,p;
for(int i=2;i<=n;i++){
cin>>tmp;
d[i-1]=tmp-last;
last=tmp;
}
for(int i=1;i<n;i++){
v[i]=d[i];
l[i]=i-1;
r[i]=i+1;
q.push(make_pair(-v[i],i));
}
v[0]=v[n]=1000000010;
for(int i=1;i<=k;i++){
while(vis[q.top().second]){
q.pop();
}
tmp=-q.top().first;
p=q.top().second;
q.pop();
ans+=tmp;
vis[l[p]]=vis[r[p]]=1;
v[p]=v[l[p]]+v[r[p]]-tmp;
l[p]=l[l[p]];
r[p]=r[r[p]];
r[l[p]]=p;
l[r[p]]=p;
q.push(make_pair(-v[p],p));
}
cout<<ans<<endl;
return 0;
}