1367: [Baltic2004]sequence

Time Limit: 20 Sec  Memory Limit: 64 MB
Submit: 932  Solved: 348
[Submit][Status][Discuss]

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

Source

Solution

论文中的例题,非常吼啊....思想巧妙

Code

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int read()
{int x=0,f=1; char ch=getchar();while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}return x*f;
}
#define maxn 1000100
long long ans;
int n,data[maxn],root[maxn],L[maxn],R[maxn],cnt[maxn],tot;
struct LeftTreeNode
{int sz,son[maxn][2],d[maxn],size[maxn],a[maxn];
//    LeftTreeNode ()
//        {
//            sz=0;memset(son,0,sizeof(son));memset(size,0,sizeof(size));
//            memset(cnt,0,sizeof(cnt));memset(a,0,sizeof(a));memset(d,0,sizeof(d));
//        }int Merge(int x,int y){if (!x) return y;if (!y) return x;if (a[x]<a[y]) swap(x,y);son[x][1]=Merge(son[x][1],y);size[x]=size[son[x][0]]+size[son[x][1]]+1;if (d[son[x][1]]>d[son[x][0]]) swap(son[x][0],son[x][1]);d[x]=d[son[x][1]]+1;return x;}int Push(int x){a[++sz]=x; size[sz]=1;son[sz][0]=son[sz][1]=d[sz]=0;return sz;}int Pop(int x) {return Merge(son[x][0],son[x][1]);}int Top(int x) {return a[x];}int Size(int x) {return size[x];}
}LTHeap;
int main()
{n=read();for (int i=1; i<=n; i++) data[i]=read()-i;for (int i=1; i<=n; i++){tot++;root[tot]=LTHeap.Push(data[i]); cnt[tot]=1; L[tot]=R[tot]=i;while (tot>1 && LTHeap.Top(root[tot])<LTHeap.Top(root[tot-1])){tot--;root[tot]=LTHeap.Merge(root[tot],root[tot+1]); cnt[tot]+=cnt[tot+1]; R[tot]=R[tot+1];while (LTHeap.Size(root[tot])*2>cnt[tot]+1) root[tot]=LTHeap.Pop(root[tot]);}}for (int i=1; i<=tot; i++)for (int j=L[i],top=LTHeap.Top(root[i]); j<=R[i]; j++)ans+=abs(data[j]-top);printf("%lld\n",ans);return 0;
}

被YveH发现了...

转载于:https://www.cnblogs.com/DaD3zZ-Beyonder/p/5469217.html

【BZOJ-1367】sequence 可并堆+中位数相关推荐

  1. BZOJ 1367 [Baltic2004]sequence 可并堆

    题意:链接 方法:可并堆 解析: wzc讲的第二道可并堆?不这是第一道,然后之前他好像还讲了个双堆求中位数? 大概想想,是不是就是维护一个小根堆以及一个大根堆,之后每次来元素,比中位数大就加到小根堆, ...

  2. BZOJ 1367 [Baltic2004]sequence

    左偏树 左偏树论文题.左偏树的优越性在于它可以不断找出树高最短的一段,因此能一直保持O(logn)的合并复杂度. 对于这题,先转成不降序列来做,只需-i 我们将序列先分成n段,则每一段的最优解z[i] ...

  3. BZOJ 1029: [JSOI2007]建筑抢修 堆+贪心

    1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的 入侵者.但 ...

  4. BZOJ 1455: 罗马游戏( 配对堆 + 并查集 )

    可并堆水题 --------------------------------------------------------- #include<bits/stdc++.h> using ...

  5. JZOJ 5609. 【NOI2018模拟3.28】Tree BZOJ 4919: [Lydsy1706月赛]大根堆

    #Description 给你一颗有 n 个点的树,其中 1 号点为根节点,每个点都有一个权值 vali 你可以从树中选择一些点,注意如果 i 与 j 都被选中且 j 在 i 的子树内,那么必须满足 ...

  6. 【学习笔记】浅谈短小可爱的左偏树(可并堆)

    文章目录 左偏树 左偏树的合并(merge)操作 例题 罗马游戏 [Apio2012]dispatching [JLOI2015]城池攻占 [Baltic2004]sequence 左偏树 左偏树是一 ...

  7. BZOJ刷题记录---提高组难度

    BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...

  8. 5.18 优先队列(堆) 滑动窗口(二) 交换链表的节点

    295. 数据流的中位数 最简单的思路暴力法,每次读入数据都进行排序 但是中位数只对中间的一个或两个数据感兴趣,其他数没有必要进行交换或者比较 https://leetcode-cn.com/prob ...

  9. 一句话题解(20170801~20170125)

    8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...

最新文章

  1. SparkStreaming和Storm的区别
  2. 【数据竞赛】十大重要的时间组合特征!
  3. Android开发之java8 lambad表达式的使用
  4. 索尼服务器维护时间,索尼云服务器
  5. csdn博客markdown 如何输入上下标(如平方指数等)
  6. 【数据结构笔记】二叉搜索树及其相关算法
  7. 【新技术】 移动支付过程中的NFC技术
  8. python源码深度剖析_Python源码剖析-深度探索动态语言核心技术 PDF 下载
  9. bugku之江湖魔头
  10. 【SQL注入技巧拓展】————14、Bypass 360主机卫士SQL注入防御(附tamper脚本)
  11. numpy部份函数或命令用法(不定时更新)
  12. typroa 思维导图_巧用Markdown和百度脑图
  13. android实现wifi与移动数据的切换
  14. Java并发编程synchronized详解
  15. 《人工智能实践:Tensorflow笔记》听课笔记22_6.1输入手写数字图片输出识别结果
  16. CAN-TP(15765-2协议)网络层协议解析
  17. 【备忘录】西北工业大学 深澜校园网登录页面
  18. Error:‘xxx‘ is not iterable 是不可迭代的
  19. 数学:分数的加减乘除模板
  20. Pytorch阅读文档之flatten函数

热门文章

  1. slack 国内 android,使用Slack Api登录,Android
  2. win10系统配置apache 2.4的虚拟主机以及查看 apache的版本
  3. python【蓝桥杯vip练习题库】BASIC-18 矩形面积交(线段交)
  4. windows编译生成在linux上运行,在linux上编译windows 32/64 上运行的vlc
  5. abb样本-感应电机与发电机手册_防爆电机如何选?
  6. idea在mac版怎么配置svn_使用Mac自带svn搭建服务器,并使用idea进行连接
  7. oralce mysql_Oralce和Mysql的3个区别
  8. 网络广告推广浅析网站的外链究竟要如何优化效果才会更好呢?
  9. 网络推广运营期间如何提升用户增长水平促进企业稳步推进网络推广
  10. 网络推广外包专员如何通过网络推广外包提升用户推送打开率?