设最优策略为第一步向左走

那么肯定是走到最左边最优

需要补一些步数

一种是最右边的连着选,多出一倍代价

一种是不连着选,多出两倍代价

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int cnt,n,lim,s,root,sz[10000005],a[1000005],ls[10000005],rs[10000005];
long long ans,tr[10000005];
void update(int x){
sz[x]=sz[ls[x]]+sz[rs[x]];
tr[x]=tr[ls[x]]+tr[rs[x]];
}
void insert(int &t,int l,int r,int x){
if (!t) t=++cnt;
if (l==r){
sz[t]++;
tr[t]+=x;
return;
}
int mid=(l+r)>>1;
if (x<=mid) insert(ls[t],l,mid,x);
else insert(rs[t],mid+1,r,x);
update(t);
}
long long query(int t,int l,int r,int x){
if (!x) return 0;
if (!t) return 0;
if (l==r) return 1ll*l*x;
int mid=(l+r)>>1;
if (sz[ls[t]]<=x) return query(rs[t],mid+1,r,x-sz[ls[t]])+tr[ls[t]];
else return query(ls[t],l,mid,x);
}
void solve(){
int Lim=lim;
if (Lim>n-2) return;
cnt=0;
root=0;
memset(ls,0,sizeof(ls));
memset(rs,0,sizeof(rs));
memset(tr,0,sizeof(tr));
memset(sz,0,sizeof(sz));
long long ANS=a[n]+a[s];
Lim-=s-1;
if (Lim<=0) ans=min(ans,ANS);
for (int i=s+1; i<n; i++){
insert(root,0,1e9,a[i+1]-a[i]);
long long ANS1=ANS+a[n]-a[i+1];
int l=Lim-(n-(i+1));
if (l>0) ANS1+=query(root,0,1e9,l)*2;
if (l>=0) ans=min(ans,ANS1);
}
}
int main(){
scanf("%d%d%d",&n,&lim,&s);
for (int i=1; i<=n; i++) scanf("%d",&a[i]);
ans=1ll<<60;
if (s!=n && n-2<lim || !lim || s==n && n-1<lim){
printf("-1\n");
return 0;
}
solve();
for (int i=1; i<=n/2; i++) swap(a[i],a[n-i+1]);
for (int i=n; i>=1; i--) a[i]=a[1]-a[i];
lim=n-lim-1;
s=n-s+1;
solve();
if (ans!=1ll<<60) printf("%lld\n",ans);
else printf("-1\n");
return 0;
}
/*
8 4 1
0 99 142 209 398 493 571 652 685
992 8 0 2
0 3 30 124 153 160 199 216 270
*/

  

最新文章

  1. spring使用Email邮件系统
  2. 9&#215;9扫雷游戏代码-C写的
  3. python 可变参数
  4. 转载-MySQL 加锁处理分析
  5. 树的最大深度 leecode java
  6. zabbix邮件告警
  7. 非服务器的定期校正时间 Anacron
  8. 安装inotify-tools监控工具
  9. Java容器——List接口
  10. div介绍 盒子模型边框属性 CSS初始化 文字排版 边框调整 溢出
  11. python二叉树练习
  12. meter压力测试 设置一秒发送一次请求,一秒两次请求
  13. Linux监控平台、安装zabbix、修改zabbix的admin密码
  14. Python3 - 基础知识、基本了解
  15. IntelliJ IDEA 普通java工程如何转为maven工程
  16. html5-progress和meter用法
  17. JDK的下载及配置
  18. hive 配置参数说明(收藏版)
  19. bat文件执行cmd命令 进入文件夹不退出
  20. Js日常笔记之数组

热门文章

  1. Spark Job调度
  2. 探索Skip List (跳跃表)
  3. mouse事件在JQ中的应用(在动画与交互中用得比较多).
  4. 同步软件UltraCompare 64位 软件及注册机
  5. 使用selenium 检测js报错
  6. POJ-3020 Antenna Placement---二分图匹配&amp;最小路径覆盖&amp;建图
  7. 2017.10.10 java中的继承与多态(重载与重写的区别)
  8. CDH4.5.0源代码编译
  9. process launch failed: Security
  10. javaScript校验图片大小、格式