Description:

Hint:

\(n<=10^5\)

Solution:

首先考虑b不严格递增时的做法

发现当\(a[i]\)递增时\(b[i]\)直接取\(a[i]\)即可,否则此时需要对之前的答案和现在的答案取中位数

如果做中位数操作之后还是小于前面的答案,就一直取中位数

最后会得到许多段值递增的区间,每一段区间里的数都对应这个答案

至于题目要求的严格递增,输入\(a\)序列时每个数减去其下标,输出答案时加回来即可

由于本题需要动态地合并序列的中位数,故采用左偏树实现

#include<bits/stdc++.h>
using namespace std;
const int mxn=1e6+5;
int n,l[mxn],r[mxn],tot[mxn],a[mxn],b[mxn],sz[mxn],dis[mxn]={-1},ch[mxn][2],val[mxn],rt[mxn]; namespace Heap {
int merge(int x,int y) {
if(!(x&&y)) return x+y;
if(val[x]<val[y]) swap(x,y);
ch[x][1]=merge(ch[x][1],y);
sz[x]=sz[ch[x][0]]+sz[ch[x][1]]+1;
if(dis[ch[x][1]]>dis[ch[x][0]])
swap(ch[x][0],ch[x][1]);
dis[x]=dis[ch[x][1]]+1;
return x;
}
}
using namespace Heap; int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",val+i),val[i]-=i;
int now=0;
for(int i=1;i<=n;++i) {
++now; l[now]=r[now]=rt[now]=i;
tot[now]=sz[rt[now]]=1;
while(now>1&&val[rt[now-1]]>val[rt[now]]) {
--now; r[now]=r[now+1],tot[now]+=tot[now+1];
rt[now]=merge(rt[now],rt[now+1]);
while(sz[rt[now]]*2>tot[now]+1)
rt[now]=merge(ch[rt[now]][0],ch[rt[now]][1]);
}
}
long long ans=0;
for(int i=1;i<=now;++i)
for(int j=l[i];j<=r[i];++j)
ans+=1ll*abs(val[rt[i]]-val[j]);
printf("%lld\n",ans);
for(int i=1;i<=now;++i)
for(int j=l[i];j<=r[i];++j)
printf("%d ",val[rt[i]]+j);
return 0;
}

最新文章

  1. BizTalk Server 2016
  2. Rxjava基础
  3. Java基础复习笔记系列 五 常用类
  4. Discuz! 的编码规范
  5. 常用的用户状态命令包括:whoami、id、groups、newgrp 等
  6. Python之路第十一天,高级(3)-Python操作 Memcached、Redis
  7. 14.8.3 Identifying the File Format in Use 确认使用的文件格式;
  8. DFS-leetcode Combination Sum I/I I
  9. python——进程、线程、协程
  10. 201521123076 《Java程序设计》第8周学习总结
  11. Numpy入门 - 线性代数运算
  12. caffe︱cifar-10数据集quick模型的官方案例
  13. 查看CentOS版本
  14. javascript中click和onclick的区别
  15. vb编程中的选择结构语句的写法
  16. MQTT——取消订阅报文和断开连接报文
  17. ARMCortex系列仿真调试器
  18. Singer 学习二 使用Singer进行gitlab 2 postgres 数据转换
  19. vue中使用js动画与velocity.js
  20. Ubuntu菜鸟入门(十六)—— 安装视频播放器vlc

热门文章

  1. linux系统的休眠与唤醒简介
  2. Linux 调优方案, 修改最大连接数(ulimit命令)【转】
  3. javaScript中自定义sort中的比较函数,用于比较字符串长度,数值大小
  4. php中相对路径和绝对路径如何使用(详解)
  5. python 全栈开发,Day84(django请求生命周期,FBV和CBV,ORM拾遗,Git)
  6. webservice之restlet实现
  7. Javascript中的反射机制(五)
  8. 查看Linux端口的占用及连接情况
  9. webstrom的热更新没效果
  10. mysql替换字符串