正题

题目链接:https://www.luogu.org/problemnew/show/P4597


题目大意

一个长度为nnn的序列,每次可以将一个数+1+1+1或−1-1−1。要求

  1. 变成一个非降序列
  2. 出现的数之前都在原序列

解题思路

我们考虑一下贪心,由于变成一个非降序列,所以肯定越往下越优。

我们将数一个一个加入序列判断答案。

若我们现在最右边的为maxnmaxnmaxn,那么右端加入一个数valvalval时。

若val≥maxnval\geq maxnval≥maxn就暂时不需要处理(因为这样也是非降的)

若val&lt;maxnval&lt;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′&lt;maxn′val'&lt;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【堆】相关推荐

  1. P4597 序列sequence

    传送门 题解 完全看不懂大佬们在说什么--特别是chen_zhe大佬写的-- 来说说个人的理解吧 大佬们说:考虑当前的数$x$和之前的最大数$y$,(默认$x<y$,因为如果$x>=y$已 ...

  2. Oracle数据库中序列(SEQUENCE)的用法详解

    http://database.51cto.com/art/201108/280742.htm 在Oracle数据库中,什么是序列呢?它的用途是什么?序列(SEQUENCE)其实是序列号生成器,可以为 ...

  3. oracle初始化序列值,如何修改序列(Sequence)的初始值(START WITH)

    Oracle 序列(Sequence)主要用于生成流水号,Oracle EBS系统中是经常用到的.但是,有时需要修改序列初始值(START WITH)时,好多人凭感觉认为:Alter Sequence ...

  4. mysql添加序列触发器_Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例...

    问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(tri ...

  5. 序列(SEQUENCE)、同义词(SYNONYM)

    --============================================= --SQL基础--> 序列(SEQUENCE).同义词(SYNONYM) --========== ...

  6. Oracle sql创建序列sequence

    知道的创建表序列的用途是当建立表的时候,Oracle不像Mysql一样会有自动主键增长AUTO_INCREMENT,所有如果需要主键自动增长的效果,Oracle提供了序列sequence方式. 创建序 ...

  7. oracle如何实现自增?----用序列sequence的方法来实现

    将表t_user的字段ID设置为自增:(用序列sequence的方法来实现) ----创建表 Create  table  t_user( Id number(6),userid varchar2(2 ...

  8. oracle 序列缓存的作用,Oracle序列sequence 深入理解

    Oracle序列:序列(Sequence)创建.使用.修改.删除,序列(Sequence)是用来生成连续的整数数据的对象.序列常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成. 语法:创 ...

  9. oracle 序列 清除,Oracle序列(Sequence)创建、使用、修改、删除

    Oracle序列(Sequence)创建.使用.修改.删除 一: 创建序列: 语法: CREATE SEQUENCE sequence_name [START WITH num] [INCREMENT ...

  10. Oracle的新建序列sequence

    新建sequence序列, 运用场景:生成流水ID. 新建序列如下: max value:生成序列的最大值 cache size:一般是0,如果缓存较大时,根据需求添加size. cycle:循环

最新文章

  1. 设计师你们还坐的住吗?2021 PS 进入人工智能 P 图时代
  2. Leangoo:用敏捷开发管理思维做团队协作的SaaS软件
  3. 三巨头共聚AAA:ICapsule没有错,LeCun看好自监督,Bengio谈注意力
  4. 在WebStorm里配置watcher实现编辑less文件时自动生成.map和压缩后的.css文件
  5. git与github区别与简介
  6. 2020-11-30(为什么字符串可以赋值给字符指针变量)
  7. python模拟百度搜索点击链接_python采集百度搜索结果带有特定URL的链接代码实例...
  8. Eclipse中,查找文件后(使用ctrl shift R/T),如何关联到文件所在目录(查看文件所在的目录结构)。
  9. [原]LVM管理与虚拟机管理
  10. WebDAV被启用(转)
  11. [笔记]3.软件代码中的BUG问题的一些记录
  12. java中的T extends Comparable ? super T
  13. window oracle 命令,windows下Oracle命令
  14. 简单的POST sql注入
  15. 调试蓝牙串口模块HC-05
  16. html 中各种鼠标手势
  17. python chm模块_python3.7.0官方参考文档 最新api文档 chm
  18. oracle如何打开控制文件,看一看oracle控制文件里面的内容
  19. 2008年度最佳开源软件大奖
  20. java后台跳转页面实现方式

热门文章

  1. 为什么年龄大了近视还增加_年龄明明一样大,为什么有人长得年轻,有人显老呢?...
  2. 类选项html 最后无距离,各种距离 一览无遗
  3. php 模板替换,使用PHPWord对Word文件做模板替换
  4. 中南民族大学c语言报告,中南民族大学信C语言实验报告.doc
  5. openwrt安装蒲公英_网速不给力?双宽带叠加,立马消除卡顿
  6. quicktype游戏java程序_使用QuickType工具从json自动生成类型声明代码
  7. python中可以表示任意大的整数_Python无法表示99999999999999999999这样大的整数。
  8. c++——优先队列(priority_queue)
  9. 后端学习 - 设计模式与设计原则
  10. [SpringSecurity]web权限方案_用户授权_基于权限访问控制_基于角色访问控制_hasAuthority和hasAnyAuthority_hasRole和hasAnyRole