sequence(bzoj 1367)
Description

Input

Output
Sample Input
9
4
8
20
14
15
18
Sample Output
HINT
所求的Z序列为6,7,8,13,14,15,18.
R=13
- /*
- 思维很扭曲(反正我想不出来)的一道题。
- 先想想不下降的:
- 考虑一个正序的序列,z[i]=t[i]
- 考虑一个逆序的序列,z[i]=x(x是逆列的中位数)
- 既然是这样那么我们就可以把整个序列化分成逆序的若干段,对于每段求中位数(正序的可看成num个逆序的)。
- 维护中位数用左偏树,具体方法是始终保持堆中数的个数不大于原数个数的一半。
- 至于改成上升的,把原序列t[i]-=i。
- PS:题解中的root[i]和堆中下标的关系把我看蒙了,所以这里说一下。
- 代码中是建立了n个堆,然而不断合并,最终变成了tot个。
- root[i]表示第i个堆(合并后的)的堆顶是哪个元素。
- */
- #include<cstdio>
- #include<iostream>
- #include<cstdlib>
- #define N 1000010
- using namespace std;
- int t[N],root[N],l[N],r[N],num[N],cnt[N],n,tot;
- struct node{
- int l,r,dis,w;
- };node heap[N];
- int merge(int a,int b){
- if(a==||b==)return a+b;
- if(heap[a].w<heap[b].w)swap(a,b);
- heap[a].r=merge(heap[a].r,b);
- if(heap[heap[a].r].dis>heap[heap[a].l].dis)
- swap(heap[a].r,heap[a].l);
- heap[a].dis=heap[heap[a].r].dis+;
- return a;
- }
- int pop(int a){
- return merge(heap[a].l,heap[a].r);
- }
- int main(){
- scanf("%d",&n);
- for(int i=;i<=n;i++)
- scanf("%d",&t[i]),t[i]-=i;
- for(int i=;i<=n;i++){
- ++tot;
- l[tot]=r[tot]=i;
- num[tot]=cnt[tot]=;
- root[tot]=i;
- heap[i].dis=heap[i].l=heap[i].r=;
- heap[i].w=t[i];
- while(tot>&&heap[root[tot]].w<heap[root[tot-]].w){
- --tot;
- root[tot]=merge(root[tot],root[tot+]);
- num[tot]+=num[tot+],cnt[tot]+=cnt[tot+],r[tot]=r[tot+];
- for(;cnt[tot]*>num[tot]+;--cnt[tot])
- root[tot]=pop(root[tot]);
- }
- }
- long long ans=;
- for(int i=;i<=tot;i++)
- for(int j=l[i],w=heap[root[i]].w;j<=r[i];j++)
- ans+=abs(t[j]-w);
- cout<<ans;
- return ;
- }
sequence(bzoj 1367)的更多相关文章
- BZOJ 1367 [Baltic2004]sequence 解题报告
BZOJ 1367 [Baltic2004]sequence Description 给定一个序列\(t_1,t_2,\dots,t_N\),求一个递增序列\(z_1<z_2<\dots& ...
- 【BZOJ 1367】 1367: [Baltic2004]sequence (可并堆-左偏树)
1367: [Baltic2004]sequence Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sample Ou ...
- BZOJ 1367: [Baltic2004]sequence [可并堆 中位数]
1367: [Baltic2004]sequence Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 1111 Solved: 439[Submit][ ...
- bzoj 1367: [Baltic2004]sequence
1367: [Baltic2004]sequence Time Limit: 20 Sec Memory Limit: 64 MB Description Input Output 一个整数R Sa ...
- bzoj 1367 [ Baltic 2004 ] sequence —— 左偏树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1367 好题啊!论文上的题: 论文上只给出了不下降序列的求法: 先考虑特殊情况,如果原序列上升 ...
- BZOJ 1367 [Baltic2004]sequence (可并堆)
题面:BZOJ传送门 题目大意:给你一个序列$a$,让你构造一个递增序列$b$,使得$\sum |a_{i}-b_{i}|$最小,$a_{i},b_{i}$均为整数 神仙题.. 我们先考虑b不递减的情 ...
- bzoj 1367 - sequence
Description 给定一个序列\(t_1,t_2,\cdots,t_n\),求一个递增序列\(z_1<z_2<...<z_n\), 使得 \(R=|t_1−z_1|+|t_2− ...
- BZOJ 1367([Baltic2004]sequence-左偏树+中位数贪心)
1367: [Baltic2004]sequence Time Limit: 20 Sec Memory Limit: 64 MB Submit: 521 Solved: 159 [ Subm ...
- 【BZOJ 1049】 1049: [HAOI2006]数字序列 (LIS+动态规划)
1049: [HAOI2006]数字序列 Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变 ...
随机推荐
- abp zero mysql版正式发布
AbpZero-MySql aspnet-zero-1.12.0的mysql版本来啦.跟mssql版一样的功能,一样的代码. 获取源码
- poj1190 生日蛋糕
题意: 要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱.当i < M时,要求Ri > ...
- Java&Xml教程(九)Java中通过XSD校验XML合法性
Java XML校验API能够通过XSD(XML Schema Definition)校验XML文件内容的合法性.在下面的案例中使用javax.xml.validation.Validator 类通过 ...
- java 之 插入排序
思想:将一个数组分成两组,左边那组始终有序,每次取右边那组插入到左边适当的位置,保证左边有序,当右边没有需要插入的数据的时候,整个数组是有序的.插入排序是稳定排序. 注:此图引用自https://ww ...
- SQLite与MySQL、SQLServer等异构数据库之间的数据同步
SQLite DBSync是开源嵌入式数据库SQLite的数据同步引擎,实现了SQLite与SQLite数据库之间以及SQLite与异构数据库(Oracle.MySQL.SQLServer)之间的增量 ...
- bitcoin 源码解析 - 交易 Transaction
bitcoin 源码解析 - 交易 Transaction(三) - Script 之前的章节已经比较粗略的解释了在Transaction体系当中的整体运作原理.接下来的章节会对这个体系进行分解,比较 ...
- mysql登录(linux)
一.修改配置文件 查询路径 find / -name my.cnf 修改文件 vi my.cnf [mysqld]下面加上skip-grant-tables 二.登录数据库 重启mysql servi ...
- Java ArrayList中去掉相同的元素并保留相同元素中的最后一个
实现思路:将list对象循环两次,拿外层数据和里面的数据对比,一样的删除外层(外层元素肯定比内存的靠前),如果一样的话,删除外层数据,这样最后输出外层数据的list,结果就能保证唯一性,并且保留了后面 ...
- 执行BarTender
1.配置.btw模板 1.1.左侧创建“具名数据源” 1.2.条码属性,选择刚才的数据源 1.3.保存 2.配置.btin服务 2.1.点击 工具/Integration Builder” 2.2.创 ...
- pc端移动端兼容的大图轮播
body, html { width: 100%; } * { margin:; padding:; list-style: none; } .haha { list-style-type: none ...