P4597-序列sequence【堆】
正题
题目链接:https://www.luogu.org/problemnew/show/P4597
题目大意
一个长度为nnn的序列,每次可以将一个数+1+1+1或−1-1−1。要求
- 变成一个非降序列
- 出现的数之前都在原序列
解题思路
我们考虑一下贪心,由于变成一个非降序列,所以肯定越往下越优。
我们将数一个一个加入序列判断答案。
若我们现在最右边的为maxnmaxnmaxn,那么右端加入一个数valvalval时。
若val≥maxnval\geq maxnval≥maxn就暂时不需要处理(因为这样也是非降的)
若val<maxnval<maxnval<maxn时我们要寻找一个标准ccc。我们发现因为ccc可以是valvalval也可以是maxnmaxnmaxn所以ccc必定是在val∼maxnval\sim maxnval∼maxn之间,之后我们发现(c−val)+(maxn−c)=maxn−val(c-val)+(maxn-c)=maxn-val(c−val)+(maxn−c)=maxn−val,所以我们让答案加上maxn−valmaxn-valmaxn−val。然后怎么办???因为maxnmaxnmaxn最多降低到valvalval,但是如果降低到valvalval就可能会导致前面不再非降。那我们暂时定义maxnmaxnmaxn和valvalval升到除了maxnmaxnmaxn的最大的一个数maxn′maxn'maxn′,但是如果下次有一个val′<maxn′val'<maxn'val′<maxn′时我们就改变这次降到的地方,使其降到val′val'val′和maxn′maxn'maxn′降到的地方。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
priority_queue<int> q;
int n;
long long ans;
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d",&x);q.push(x);if(x<q.top()){ans+=q.top()-x;q.pop();q.push(x);}}printf("%lld",ans);
}
P4597-序列sequence【堆】相关推荐
- P4597 序列sequence
传送门 题解 完全看不懂大佬们在说什么--特别是chen_zhe大佬写的-- 来说说个人的理解吧 大佬们说:考虑当前的数$x$和之前的最大数$y$,(默认$x<y$,因为如果$x>=y$已 ...
- Oracle数据库中序列(SEQUENCE)的用法详解
http://database.51cto.com/art/201108/280742.htm 在Oracle数据库中,什么是序列呢?它的用途是什么?序列(SEQUENCE)其实是序列号生成器,可以为 ...
- oracle初始化序列值,如何修改序列(Sequence)的初始值(START WITH)
Oracle 序列(Sequence)主要用于生成流水号,Oracle EBS系统中是经常用到的.但是,有时需要修改序列初始值(START WITH)时,好多人凭感觉认为:Alter Sequence ...
- mysql添加序列触发器_Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例...
问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(tri ...
- 序列(SEQUENCE)、同义词(SYNONYM)
--============================================= --SQL基础--> 序列(SEQUENCE).同义词(SYNONYM) --========== ...
- Oracle sql创建序列sequence
知道的创建表序列的用途是当建立表的时候,Oracle不像Mysql一样会有自动主键增长AUTO_INCREMENT,所有如果需要主键自动增长的效果,Oracle提供了序列sequence方式. 创建序 ...
- oracle如何实现自增?----用序列sequence的方法来实现
将表t_user的字段ID设置为自增:(用序列sequence的方法来实现) ----创建表 Create table t_user( Id number(6),userid varchar2(2 ...
- oracle 序列缓存的作用,Oracle序列sequence 深入理解
Oracle序列:序列(Sequence)创建.使用.修改.删除,序列(Sequence)是用来生成连续的整数数据的对象.序列常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成. 语法:创 ...
- oracle 序列 清除,Oracle序列(Sequence)创建、使用、修改、删除
Oracle序列(Sequence)创建.使用.修改.删除 一: 创建序列: 语法: CREATE SEQUENCE sequence_name [START WITH num] [INCREMENT ...
- Oracle的新建序列sequence
新建sequence序列, 运用场景:生成流水ID. 新建序列如下: max value:生成序列的最大值 cache size:一般是0,如果缓存较大时,根据需求添加size. cycle:循环
最新文章
- 设计师你们还坐的住吗?2021 PS 进入人工智能 P 图时代
- Leangoo:用敏捷开发管理思维做团队协作的SaaS软件
- 三巨头共聚AAA:ICapsule没有错,LeCun看好自监督,Bengio谈注意力
- 在WebStorm里配置watcher实现编辑less文件时自动生成.map和压缩后的.css文件
- git与github区别与简介
- 2020-11-30(为什么字符串可以赋值给字符指针变量)
- python模拟百度搜索点击链接_python采集百度搜索结果带有特定URL的链接代码实例...
- Eclipse中,查找文件后(使用ctrl shift R/T),如何关联到文件所在目录(查看文件所在的目录结构)。
- [原]LVM管理与虚拟机管理
- WebDAV被启用(转)
- [笔记]3.软件代码中的BUG问题的一些记录
- java中的T extends Comparable ? super T
- window oracle 命令,windows下Oracle命令
- 简单的POST sql注入
- 调试蓝牙串口模块HC-05
- html 中各种鼠标手势
- python chm模块_python3.7.0官方参考文档 最新api文档 chm
- oracle如何打开控制文件,看一看oracle控制文件里面的内容
- 2008年度最佳开源软件大奖
- java后台跳转页面实现方式
热门文章
- 为什么年龄大了近视还增加_年龄明明一样大,为什么有人长得年轻,有人显老呢?...
- 类选项html 最后无距离,各种距离 一览无遗
- php 模板替换,使用PHPWord对Word文件做模板替换
- 中南民族大学c语言报告,中南民族大学信C语言实验报告.doc
- openwrt安装蒲公英_网速不给力?双宽带叠加,立马消除卡顿
- quicktype游戏java程序_使用QuickType工具从json自动生成类型声明代码
- python中可以表示任意大的整数_Python无法表示99999999999999999999这样大的整数。
- c++——优先队列(priority_queue)
- 后端学习 - 设计模式与设计原则
- [SpringSecurity]web权限方案_用户授权_基于权限访问控制_基于角色访问控制_hasAuthority和hasAnyAuthority_hasRole和hasAnyRole