题面

这是一道标准的带反悔贪心;

利用大根堆来维护最大值:

当选择了num[i]后,反悔了,反之选择选了num[i-1]和num[i+1]时获利便增加了num[i-1]+num[i+1]-num[i]。

所以当num[i]被选时,我们就可以删去num[i-1]和num[i+1],并把num[i]改成num[i-1]+num[i+1]-num[i],放进堆中

#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[];
priority_queue<pair<long long,long long> > q;
bool bo[];
int l[],r[];
signed main()
{
int n,m;
cin>>n>>m;
for(register int i=;i<=n;i++){
cin>>a[i];
l[i]=i-;
r[i]=i+;
q.push(make_pair(a[i],i));
}
l[n+]=n;
r[]=;
long long ans=;
for(int i=;i<=m;i++){
while(bo[q.top().second]){
q.pop();
}
int x=q.top().second;
long long tmp=q.top().first;
q.pop();
if(tmp<) break;
ans+=tmp;
a[x]=a[l[x]]+a[r[x]]-a[x];
bo[l[x]]=;
bo[r[x]]=;
l[x]=l[l[x]];
r[x]=r[r[x]];
r[l[x]]=x;
l[r[x]]=x;
q.push(make_pair(a[x],x));
}
cout<<ans;
}

洛谷 P1484 种树 题解的更多相关文章

  1. 洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心)

    洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/132 ...

  2. 洛谷 P1484 种树

    题目描述 cyrcyr今天在种树,他在一条直线上挖了n个坑.这n个坑都可以种树,但为了保证每一棵树都有充足的养料,cyrcyr不会在相邻的两个坑中种树.而且由于cyrcyr的树种不够,他至多会种k棵树 ...

  3. [洛谷P1484] 种树

    题目类型:堆+贪心 传送门:>Here< 题意:有\(N\)个坑,每个坑可以种树,且获利\(a[i]\)(可以为负).任何相邻两个坑里不能都种树,问在最多种\(K\)棵树的前提下的最大获利 ...

  4. 洛谷 P1250 种树 题解

    差分约束系统,维护前缀和,根据式子d[ b ] < = d[ e + 1 ] - t,可以看出要连e和b - 1,但占用了超级源点0,所以要把区间向后移,这样就可以用超级源点0来保持图的连通性( ...

  5. 洛谷 P1484 种树(优先队列,贪心,链表)

    传送门 解题思路 第一眼的贪心策略:每次都选最大的. 但是——不正确! 因为选了第i个树,第i-1和i-1棵树就不能选了.所以,要有一个反悔操作. 选了第i个后,我们就把a[i]的值更新为a[l[i] ...

  6. 洛谷NOIp热身赛题解

    洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...

  7. 洛谷P2827 蚯蚓 题解

    洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...

  8. 洛谷P1816 忠诚 题解

    洛谷P1816 忠诚 题解 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人 ...

  9. [POI 2008&洛谷P3467]PLA-Postering 题解(单调栈)

    [POI 2008&洛谷P3467]PLA-Postering Description Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长 ...

随机推荐

  1. nginx命令和配置

    centos 6.8安装的nginx 1.12.2 1.nginx常用的命令 使用nginx命令前,进入到/usr/local/nginx/sbin/目录 1)查看nginx版本 进入到/usr/lo ...

  2. jquery error()方法 语法

    jquery error()方法 语法 作用:当元素遇到错误(没有正确载入)时,发生 error 事件.error() 方法触发 error 事件,或规定当发生 error 事件时运行的函数.该方法是 ...

  3. C# 桌面截屏 添加鼠标

    #region 第一种方法 [DllImport("user32.dll")] static extern bool GetCursorInfo(out CURSORINFO pc ...

  4. poj 3662 Telephone Lines dijkstra+二分搜索

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5696   Accepted: 2071 D ...

  5. Selenium 加载Chrome/Firefox浏览器配置文件

    Selenium启动浏览器时,默认是打开一个新用户,不会加载原有的配置以及插件.但有些时候我们可能需要加载默认配置. 一.Chrome浏览器 1.在Chrome浏览器的地址栏输入:chrome://v ...

  6. jquery 动态增加删除行

    最近写程序,碰巧有动态增加删除行,下面就记录一下 html就不写了,也没有什么,直接上核心了 新增行 function addRow(obj){ //获得table一共有多少行,方便追加的时候给序号赋 ...

  7. springboot 项目中在普通类中调用dao层的mapper 出现空指针异常

    项目中我遇到同样的问题 特记载一下 有两种方式 一. 该类使用@Component注解 添加一个本类类型的静态字段 创建一个初始化方法,贴上@PostConstruct 标签,用于注入bean 创建方 ...

  8. C++入门经典-例3.9-使用嵌套表达式判断一个数是否是3和5的整数倍

    1:代码如下: // 3.9.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using ...

  9. winform Timer控件的使用

    private void button1_Click(object sender, EventArgs e){ Timer timer1 = new Timer(); timer1.Interval ...

  10. C# base64 加密解密

    1.base64  to  string string strPath = "aHR0cDovLzIwMy44MS4yOS40Njo1NTU3L1 9iYWlkdS9yaW5ncy9taWR ...