记录编号 578496 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [CTSC 2007]数据备份 最终得分 100
用户昵称 Gravatarムラサメ 是否通过 通过
代码语言 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;
}