#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int vis[200002];
struct node{
int val,num;
bool operator <(node it) const{return val<it.val;}
//ѧһÏÂÔËËã·ûÖØÔØ
};
struct node1{
int val,l,r;
}p[200002];//Á´±í
void del(int x){
p[x].l=p[p[x].l].l;
p[x].r=p[p[x].r].r;
p[p[x].l].r=x;
p[p[x].r].l=x;
}
int main()
{
priority_queue<node> q;
int n,m;
long long ans=0;
scanf("%d%d",&n,&m);
if(n/2<m)
{
printf("Error!");
return 0;
}
for(int i=1;i<=n;i++)
{
scanf("%d",&p[i].val);
p[i].l=i-1;p[i].r=i+1;
q.push((node){p[i].val,i});
}
p[1].l=n,p[n].r=1;
for(int i=1;i<=m;i++)
{
while(vis[q.top().num])
{
q.pop();
}
node n=q.top();q.pop();
vis[p[n.num].l]=1,vis[p[n.num].r]=1;
p[n.num].val=p[p[n.num].l].val+p[p[n.num].r].val-p[n.num].val;
q.push((node){p[n.num].val,n.num});
ans+=n.val;
del(n.num);
}
printf("%lld",ans);
return 0;
}
P1792 [国家集训队] 种树
最新推荐文章于 2025-12-04 22:00:44 发布
627

被折叠的 条评论
为什么被折叠?



