BZOJ5059 前鬼后鬼的守护 【堆扩展】*
BZOJ5059 前鬼后鬼的守护
Description
八云紫的式神八云蓝有一张符卡名为[式神-前鬼后鬼的守护],这张符卡的弹幕为BOSS从两侧向自机发射大玉,大玉后面跟着一些小玉,形成一个“V”字型的弹幕。然鹅兰大人觉得这个弹幕还能再美观一些,她想让自己的弹幕能从左向右发射,于是她就开始了行动。
[式神-前鬼后鬼的守护]由 N波弹幕组成,每波弹幕都有一个落到板底的位置,第i波弹幕的落地位置为Xi。
为了让弹幕能从左到右落地,蓝妈需要改变一些弹幕的落地位置,使得改变后的落地位置的坐标不递减,即
。然鹅改变弹幕的方向是很累的,蓝妈每将一波弹幕的坐标增加或减少1,就会花费一单位的能量,即
蓝妈想确定一个最终的修改方案使得他花费的能量最少,于是她将设计修改方案的任务交给了自己的式神八云橙。
这可急坏了我们的橙喵,她只是连曼哈顿距离都不会算的年幼式神,你能帮助她完成这个任务吗?
Input
输入文件第一行为一个正整数N ,意义如题目所示。接下来一行N个正整数,第i个整数代表Xi 。
N<=5*10^5,Xi<=10^9
Output
输出一个整数,为最小消耗的能量值。
Sample Input
7
1 3 2 4 5 3 9
Sample Output
3
将第二波弹幕的落地位置由3改为2 ,花费为1 ,将第六波由3 改为5 ,花费为2 ,总花费为1+2=3 ,形成了一个不下降序列:1,2,2,4,5,5,9为最优解(不一定为唯一最优解)
BZOJ上最短的代码就这样贴出来了
首先我们考虑已经维护好的一个区间
我们考虑新加入一个小于最大值的点(大于最大值直接加入)
就像这样
我们可以花费 abs(valmax−valA) a b s ( v a l m a x − v a l A ) abs(valmax-valA)的代价把A和max变成这区间中的任意一个数,所以也就实现了维护
所以我们其实就相当于是把max变成了A,并付出了 abs(valmax−valA) a b s ( v a l m a x − v a l A ) abs(valmax-valA)的代价
这样之后我们又可以从当前的max开始维护
这样举个栗子:
新加入的点小于原来的A怎么办?雾
我们可以用 abs(valmax(C)−valH) a b s ( v a l m a x ( C ) − v a l H ) abs(valmax(C)-valH)的代价把C和H变成这区间中的任意一个数,在这里我们可以直接将就上一次剩下的A,其实也不影响,所以C和H又相当于变成了两个H
可以证明一定是可以有一种方式使得单调不减
然后就写一段小小的代码
非常方便快捷
#include<bits/stdc++.h>
using namespace std;
priority_queue<int> q;
int n,x;
long long ans=0;
int main(){scanf("%d",&n);while(n--){scanf("%d",&x);q.push(x);if(x<q.top()){ans+=abs(q.top()-x);q.pop();q.push(x);}}printf("%lld",ans);
}
BZOJ5059 前鬼后鬼的守护 【堆扩展】*相关推荐
- java 建树源码_Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】...
import java.util.ArrayDeque; import java.util.Queue; import java.util.Stack; //二叉树的建树,前中后 递归非递归遍历 层序 ...
- 三层神经网络前向后向传播示意图
BP 神经网络信号前向后向传播示意图 主要参考博文 BP神经网络后向传播算法 本文主要分析下面的三层神经网络的信号传播,两个输入,两个隐层,一个输出 网络中每个紫色模块是一个神经元,它包括信号输入求和 ...
- HMM 前向 后向 Viterbi算法讲解通透的
HMM 前向 后向 Viterbi算法讲解通透的 https://blog.csdn.net/xueyingxue001/article/details/52396494 什么是HMM https: ...
- 前松后紧和前紧后松——想起PM的点滴
简单谈谈开发流程和管理中几个一般性的原则. 1. 前松后紧原则 做事情有时候真的要看好方向.方向错了,会严重影响项目进度和投入产出比,你努力工作的成果也许几乎无用,这也是很多项目失败的根本原 ...
- 转载:二叉树的前中后和层序遍历详细图解(递归和非递归写法)
二叉树的前中后和层序遍历详细图解(递归和非递归写法) Monster_ii 2018-08-27 17:01:53 50530 收藏 403 分类专栏: 数据结构拾遗 文章标签: 二叉树 前序 中序 ...
- Kettle使用_20 笛卡尔积与前一行后一行Lead Lag
Kettle使用_20 笛卡尔积与前一行后一行Lead Lag 需求:通过Kettle通过两种数据源(其中一个是随机数)实现120条记录并生成两列,分别对应每条记录的前一行和后一行. 解决方法:通过K ...
- LeetCode——树:层次遍历、前中后序遍历
LeetCode--树:层次遍历.前中后序遍历 目录 层次遍历 二叉树的层平均值 找树左下角的值 前中后序遍历 概述 非递归实现二叉树的前序遍历 非递归实现二叉树的中序遍历 非递归实现二叉树的后序遍历 ...
- HMM前向算法,维比特算法,后向算法,前向后向算法代码
typedef struct { int N; /* 隐藏状态数目;Q={1,2,-,N} */ int M; /* 观察符号数目; V={1,2,-,M}*/ double **A; /* 状态转移 ...
- HMM——前向后向算法
1. 前言 解决HMM的第二个问题:学习问题, 已知观测序列,需要估计模型参数,使得在该模型下观测序列 P(观测序列 | 模型参数)最大,用的是极大似然估计方法估计参数. 根据已知观测序列和对应的状态 ...
最新文章
- Silverlight C# 游戏开发:Silverlight开发环境
- MATH6005 Final Assignment MATH6005 2018-19
- LINUX系统中进程如何管理控制(一)
- python爬虫入门教程-Python 爬虫介绍
- raspberrypi python传感器_Raspberry Pi和Arduino读取串行传感器d
- Python_微信开发
- 异常连接导致的内存泄漏排查
- 计算机网络暗地里范围,《计算机网络应用技术教程》期中试题.doc
- 机器学习实战笔记1——机器学习导论
- 三边测量定位算法C语言实现
- iOS 一行代码集成微信浮窗功能
- provision文件路径
- 中国水产科学研究院教授黄樟翰走进伊宅购集团考察伊家田园项目
- APS审核经验+审核资料汇总——计算机科学与技术专业上海德语审核
- python试卷三联学院_安徽三联学院期末考试英国文学完整版
- 转载海科SEO-探秘qq空间seo设置
- 将文本文件导入到mysql,hive数据库中
- Android Studio 微信界面开发——主页面框架
- 【Web入门项目源码分享】Java+Jsp
- 元宇宙Metaverse是什么?为什么这么火爆?