思路:
求出数字1~n的后缀和,除去sum[1~n],求出后缀中前(k-2)个最大值,(这样就使较大的值累加了k-2次),
然后结果就是sum[1~n]+ans。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn = 3e5+10;
LL a[maxn]={0},re[maxn]={0};
int main(void){
int n,k;scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=n;i>=1;i--) re[i] = re[i+1]+a[i];
sort(re+2,re+n+1);
LL ans = re[1];
for(int i=n;i>=n-k+2;i--) ans += re[i];
printf("%lld\n",ans);
return 0;
}