问题等价于选出$n / 3$个不相邻元素是权值和最大

这是一个经典贪心问题,同种树,拿堆维护即可,复杂度$O(n \log n)$

#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;extern inline char gc() {static char RR[23456], *S = RR + 23333, *T = RR + 23333;if(S == T) fread(RR, 1, 23333, stdin), S = RR;return *S ++;
}
inline int read() {int p = 0, w = 1; char c = gc();while(c > '9' || c < '0') { if(c == '-') w = -1; c = gc(); }while(c >= '0' && c <= '9') p = p * 10 + c - '0', c = gc();return p * w;
}#define ll long long
#define ri register int
#define sid 200050int n, k;
bool gg[sid];
ll ans, v[sid], pre[sid], nxt[sid];struct Man {ll id, val;Man() {}Man(ll _i, ll _v) : id(_i), val(_v) {}friend bool operator < (Man a, Man b){ return a.val < b.val; }
} ;
priority_queue <Man> q;inline void del(int o) {pre[nxt[o]] = pre[o];nxt[pre[o]] = nxt[o];gg[o] = 1;
}int main() {n = read();for(ri i = 1; i <= n; i ++) v[i] = read();for(ri i = 1; i <= n; i ++) {pre[i] = i - 1; nxt[i] = i + 1;q.push(Man(i, v[i]));}pre[1] = n; nxt[n] = 1;k = n / 3;for(ri i = 1; i <= k; i ++) {Man o; int id;while(1) {o = q.top(); q.pop();id = o.id; if(!gg[id]) break;}ans += v[id];v[id] = v[pre[id]] + v[nxt[id]] - v[id];q.push(Man(id, v[id]));del(pre[id]); del(nxt[id]);}printf("%lld\n", ans);return 0;
}

转载于:https://www.cnblogs.com/reverymoon/p/9558001.html

51nod1380 夹克老爷的逢三抽一相关推荐

  1. 51nod138夹克老爷的逢三抽一

    题目大意 又到了诺德县的百姓孝敬夹克大老爷的日子,带着数量不等的铜板的村民准时聚集到了村口. 夹克老爷是一位很"善良"的老爷,为了体现他的仁慈,有一套特别的收钱的技巧. 1.让所有 ...

  2. C语言逢三必过的小游戏,逢3过游戏全部数字表 逢七必过和逢三必过,都是哪些数字要喊过。哪位高人有准确数字呢?...

    逢七必过和逢三必过,都是哪些数字要喊过.哪位高人有准确数字呢? 这位兄台打算喝酒的时候用啊,你准备用到多少呢.100以内的有以下这些.估计因该够用了吧,喝高了后用不到多少的. 3.6.7.9.12.1 ...

  3. 基于酷Q的崩坏三抽卡模拟_C++入门级酷Q插件开发

    插件简介 为了高仿官方抽卡概率,我设计调整了数据,在一定程度上满足了出货期望和官方概率近视相等~(注意:不同十连间抽卡保底事件是相互独立的,同卡池单抽十连共享保底,抽卡保底不与抽卡的人有关)(Pro和 ...

  4. 【JAVA】逢三退一的第二种思路(面向对象)

    提供第二种思路: 题目:500个小孩手拉手围成一圈,每个小孩有一编号,数数,当数到第三个时,将该小孩删除,求最后剩下的那个小孩是这500个小孩中的第几个. 面向对象编程,首先分析,有多少个对象? 两个 ...

  5. linux如何运行java程序,Linux环境下运行简单java程序

    一.安装java 1.下载jdk8 选择对应jdk版本下载.(Tips:可在Windows下载完成后,通过FTP或者SSH到发送到Linux上) 2. 登录Linux,切换到root用户 su roo ...

  6. python的内置字典数据类型_python 数据类型元组与字典内置方法

    1.元组 (1)元组是不可变的列表,能存多个值:如果多个值只有取得需求,没有改的需求,用元组最合理 (2)定义:在()内用逗号隔开,可以存任意类型的值 注意:当元组只有一个元素时,要在后面加逗号 # ...

  7. 市场调研工具—铺货率调查

    什么是铺货率调查,铺货率调查不做不行吗,非做不可吗? 要回答这个问题,可能需要重新回到管理的层面上来看. 实际上,铺货率调查也谈不上什么非可非不可的,对于粗放式经营,铺货率调查的意义不大,对于精细化运 ...

  8. 说话中的引题技巧,及电影刘三姐中的歌词汇总

    电影刘三姐的插曲,真是简单好唱又好听.其中的歌词,通俗易懂.因为觉得歌词好,所以在这里汇总一下. 这些歌词的共同特点,就是先引题,再说话.比如说: 隔山唱歌山答应,隔水唱歌水回声,今日歌场初会面,三位 ...

  9. (二进制枚举+思维)1625 夹克爷发红包

    1625 夹克爷发红包 1 秒 131,072 KB 20 分 3 级题 在公司年会上,做为互联网巨头51nod掌门人的夹克老爷当然不会放过任何发红包的机会. 现场有n排m列观众,夹克老爷会为每一名观 ...

最新文章

  1. CentOS 6.5 手动rpm包安装gcc、g++
  2. OpenGL实现flocking (聚集)实例
  3. 【传统PSTN与互联网通信】
  4. C#基础-应用程序域
  5. 正弦定理和余弦定理_高三 | 数学必修五正弦定理和余弦定理应用举例考点梳理...
  6. CSS3之firefoxsafari背景渐变之争 - [前端技术][转]
  7. 基于Levy飞行策略的改进樽海鞘群算法-附代码
  8. 模式识别和机器学习的区别
  9. php中字符串的截取函数,PHP字符串截取和截取函数的介绍
  10. 介绍两种游标cursor与sys_refcursor
  11. android 锁屏代码分析,Android锁屏状态下的安全分析
  12. 制作微信公众号二维码,跳转,获取参数
  13. RX 6600XT vs RTX 2060Super 显卡对比
  14. 【Android玩机】跟大家聊聊面具Magisk的使用(安装、隐藏)
  15. 2016中国移动CRM洞察力论坛召开|码客荣获2016中国移动CRM产品创新奖
  16. 架设局域网升级服务器 用WSUS打补丁
  17. 爱德泰科普 | 一文了解如何整理机柜内的光纤跳线
  18. xp访问win10计算机名,xp连接win10共享打印机提示凭证不足怎么办
  19. (八)QRJDC正式版/QQ扫码登录直达青龙/Docker上的部署教程/很干很干/没水喝【2020年5月1日】
  20. 让别人不能关掉python程序_《让》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...

热门文章

  1. postman 返回json乱码_post json 中文编码问题
  2. python的django_真正搞明白Python中Django和Flask框架的区别
  3. java动态字段排序_Java8对多个字段排序
  4. Python字符串isalnum()
  5. java队列 双队列_Java队列– Java队列
  6. 如何才能成为高级Java开发工程师
  7. qml中对于动态遮照效果的封装
  8. Swift 类与结构体
  9. iptables 防火墙为什么不占用端口?
  10. bzoj 1076 奖励关 状压+期望dp