BZOJ_1367_[Baltic2004]sequence_结论题+可并堆

Description

Input

Output

一个整数R

Sample Input

7
9
4
8
20
14
15
18

Sample Output

13

HINT

所求的Z序列为6,7,8,13,14,15,18.
R=13


神题。有一个结论:最优解一定是把序列分成m块,每块取中位数,并使得取出的序列递增。

不会证?https://wenku.baidu.com/view/20e9ff18964bcf84b9d57ba1.html

然后发现后面的合法中位数递增,搞来一个可并大根堆来维护,当堆内元素超过序列的一半时弹出。

然而结论要求序列不降,这里求序列递增。

我们发现每个递增的序列的每个数$ai$ 减去$i$ 对应着唯一一个不降序列,故在一开始对序列进行处理。

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
char nc() {
static char buf[100000],*p1,*p2;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int rd() {
register int x=0; register char s=nc();
while(s<'0'||s>'9') s=nc();
while(s>='0'&&s<='9') x=x*10+s-'0',s=nc();
return x;
}
int fabs(int x){return x>0?x:-x;}
#define N 1000050
typedef long long ll;
int n,a[N],root[N],siz[N],val[N],ls[N],rs[N],dis[N],lp[N],rp[N];
ll ans;
int merge(int x,int y) {
if(!x) return y;
if(!y) return x;
if(val[x]<val[y]) swap(x,y);
siz[x]+=siz[y];
rs[x]=merge(rs[x],y);
if(dis[rs[x]]>dis[ls[x]]) swap(ls[x],rs[x]);
dis[x]=dis[rs[x]]+1;
return x;
}
int main() {
n=rd();
int i,tot=0,m=0,j;
for(i=1;i<=n;i++) a[i]=rd(),a[i]-=i;
dis[0]=-1;
for(i=1;i<=n;i++) {
root[++m]=++tot; val[tot]=a[i]; siz[tot]=1; lp[m]=rp[m]=i;
while(m>1&&val[root[m]]<val[root[m-1]]) {
m--; root[m]=merge(root[m],root[m+1]); rp[m]=rp[m+1];
while(2*siz[root[m]]>rp[m]-lp[m]+2) root[m]=merge(ls[root[m]],rs[root[m]]);
}
}
for(i=1;i<=m;i++) {
for(j=lp[i];j<=rp[i];j++) {
ans+=fabs(val[root[i]]-a[j]);
}
}
printf("%lld\n",ans);
}

BZOJ_1367_[Baltic2004]sequence_结论题+可并堆的更多相关文章

  1. [BZOJ3609][Heoi2014]人人尽说江南好 结论题

    Description 小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家), 最近他 想起了小时候在江南玩过的一个游戏.     在过去,人们是要 ...

  2. [codevs5578][咸鱼]tarjan/结论题

    5578 咸鱼  时间限制: 1 s  空间限制: 128000 KB   题目描述 Description 在广袤的正方形土地上有n条水平的河流和m条垂直的河流,发达的咸鱼家族在m*n个河流交叉点都 ...

  3. 【uoj#282】长度测量鸡 结论题

    题目描述 给出一个长度为 $\frac{n(n+1)}2$ 的直尺,要在 $0$ 和 $\frac{n(n+1)}2$ 之间选择 $n-1$ 个刻度,使得 $1\sim \frac{n(n+1)}2$ ...

  4. 【uoj#175】新年的网警 结论题+Hash

    题目描述 给出一张 $n$ 个点 $m$ 条边的无向连通图,每条边的边权为1.对于每个点 $i$ ,问是否存在另一个点 $j$ ,使得对于任意一个不为 $i$ 或 $j$ 的点 $k$ ,$i$ 到 ...

  5. 【uoj#180】[UR #12]实验室外的攻防战 结论题+树状数组

    题目描述 给出两个长度为 $n$ 的排列 $A$ 和 $B$ ,如果 $A_i>A_{i+1}$ 则可以交换 $A_i$ 和 $A_{i+1}$ .问是否能将 $A$ 交换成 $B$ . 输入 ...

  6. 【bzoj4401】块的计数 结论题

    题目描述 给出一棵n个点的树,求有多少个si使得整棵树可以分为n/si个连通块. 输入 第一行一个正整数N,表示这棵树的结点总数,接下来N-1行,每行两个数字X,Y表示编号为X的结点与编号为Y的结点相 ...

  7. 【bzoj3997】[TJOI2015]组合数学 Dilworth定理结论题+dp

    题目描述 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走 ...

  8. 【bzoj2079】[Poi2010]Guilds 构造结论题

    题目描述 Zy皇帝面临一个严峻的问题,两个互相抵触的贸易团体,YYD工会和FSR工会,他们在同一时间请求在王国各个城市开办自己的办事处.这里有n个城市,其中有一些以双向马路相连,这两个工会要求每个城市 ...

  9. agc015F - Kenus the Ancient Greek(结论题)

    题意 题目链接 $Q$组询问,每次给出$[x, y]$,定义$f(x, y)$为计算$(x, y)$的最大公约数需要的步数,设$i \leqslant x, j \leqslant y$,求$max( ...

随机推荐

  1. React 深入系列5:事件处理

    文:徐超,<React进阶之路>作者 授权发布,转载请注明作者及出处 React 深入系列5:事件处理 React 深入系列,深入讲解了React中的重点概念.特性和模式等,旨在帮助大家加 ...

  2. 超强js博客值得学习!!!

    再读ecmascript 摘要: 这几天,又花了点时间看了下ecmascript.以下是我摘录出来的一些理解.在此记录下.第一部分:关于变量对象的理解1) 什么是变量对象?数据的存取与读取机制,就是变 ...

  3. ORACLE 分页查询

    Oracle之分页查询 Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SE ...

  4. App上线Check List

    1.umeng统计.安全加固等第三方功能到位,本次上线市场列表选择好.2.后台数据库模式准备3.后台数据库数据准备4.后台应用服务器运行检查5.前端界面信息要正确6.前端交互不能出现过度卡顿和经常闪退 ...

  5. clear read-only status问题的解决

    IDEA系工具可能会报出的错误. 解决方法见官方文档吧:Changing Read-Only Status of Files  : https://www.jetbrains.com/help/ide ...

  6. 单调队列——求m区间内的最小值

    单调队列,顾名思义是指队列内的元素是有序的,队头为当前的最大值(单调递减队列)或最小值(单调递增序列),以单调递减队列为例来看队列的入队和出队操作: 1.入队: 如果当前元素要进队,把当前元素和队尾元 ...

  7. ScalaPB(2): 在scala中用gRPC实现微服务

    gRPC是google开源提供的一个RPC软件框架,它的特点是极大简化了传统RPC的开发流程和代码量,使用户可以免除许多陷阱并聚焦于实际应用逻辑中.作为一种google的最新RPC解决方案,gRPC具 ...

  8. Jquery浅克隆与深克隆

    Jquery浅克隆与深克隆 JavaScript部分 $("div").on('click', function() {//执行操作}) //clone处理一 $("di ...

  9. 破解linux虚拟机的密码

    虚拟机破解秘密码步骤:          虚拟机(server)的登录通常需要一个本地用户,而本地用户密码假如不知道或者是已经忘记了,也是有办法进入的,在Linux系统内就有可以提供这种可以进入的方案 ...

  10. JS——函数

    一.函数的种类 1.无参函数 function showName() { alert("我是无参函数"); } 2.有参函数 在函数中的参数为"形式参数" 形式 ...