题目传送门

题目大意: 有一个圆环状的广场,不能在相邻的位置种树,每个位置种树有一个美观度,现在要求美观度最大。

题解

考虑贪心。

每次取美观度最大的位置即可,但是要考虑一种需要反悔的情况——取 xxx 旁边的两个位置比取 xxx 更优。那么只需要在取了 xxx 之后,往堆里面加一个 val[pre]+val[next]−val[x]val[pre]+val[next]-val[x]val[pre]+val[next]−val[x],preprepre 和 nextnextnext 是指前驱和后继。同时,还需要将堆里面的 val[pre]val[pre]val[pre] 和 val[next]val[next]val[next] 删掉,相当于把 pre,x,nextpre,x,nextpre,x,next 三个点合并成一个点。

代码如下(手写堆有点丑……):

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 200010int n,m;
struct node{int x,y;};
struct dd{node a[maxn];int t;dd():t(0){}void up(int x){while(x>1&&a[x].x>a[x/2].x){swap(a[x],a[x/2]);x/=2;}}void add(int x,int y){a[++t]=(node){x,y};up(t);}void down(int x){if(x>t/2)return;int ans=x;if(a[x*2].x>a[x].x)ans=x*2;if(x*2+1<=t&&a[x*2+1].x>a[ans].x)ans=x*2+1;if(x!=ans){swap(a[x],a[ans]);down(ans);}}node pop(){node re=a[1];a[1]=a[t--];down(1);return re;}bool empty(){return t==0;}
}dui;
int a[maxn],next[maxn],pre[maxn];
bool del[maxn];int main()
{scanf("%d %d",&n,&m);if(m>n/2)return printf("Error!"),0;for(int i=1;i<=n;i++)scanf("%d",&a[i]),dui.add(a[i],i),next[i]=i+1,pre[i]=i-1;pre[1]=n;next[n]=1;//这是个环int ans=0;while(m--){while(del[dui.a[1].y])dui.pop();node now=dui.pop();ans+=now.x;a[now.y]=a[next[now.y]]+a[pre[now.y]]-a[now.y];del[next[now.y]]=del[pre[now.y]]=true;next[now.y]=next[next[now.y]];pre[now.y]=pre[pre[now.y]];//更新前驱后继pre[next[now.y]]=next[pre[now.y]]=now.y;dui.add(a[now.y],now.y);}printf("%d",ans);
}

国家集训队 种树 题解相关推荐

  1. 洛谷P2619 [国家集训队]Tree I 题解

    洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...

  2. 2038: [2009国家集训队]小Z的袜子(hose)+莫队入门

    题目链接:2038: [2009国家集训队]小Z的袜子(hose) 题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再 ...

  3. happiness[国家集训队2011(吴确)]

    [试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...

  4. P2183 [国家集训队]礼物(扩展卢卡斯)

    P2183 [国家集训队]礼物 题意: 有n个礼物,分给m个人,分给第i个人的礼物数量是wi,问送礼物的方案数. 题解: 扩展卢卡斯模板题 很容易看出和组合数有关的题目,对于总方案,完美可以将其分解为 ...

  5. P1829 [国家集训队]Crash的数字表格 / JZPTAB

    P1829 [国家集训队]Crash的数字表格 / JZPTAB 题意: 求∑i=1n∑j=1mlcm(i,j)\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)∑i=1n​∑j ...

  6. P2634 [国家集训队]聪聪可可(树上启发式合并)

    P2634 [国家集训队]聪聪可可(树上启发式合并) 题意: 一颗n个点的树,问其中两点之间的边上数的和加起来是3的倍数的点对有多少个? 输出这样的点对所占比例 题解: 没有修改,统计边长为3的倍数, ...

  7. P2634 [国家集训队]聪聪可可(点分治做法)

    P2634 [国家集训队]聪聪可可 题意: 一颗n个点的树,问其中两点之间的边上数的和加起来是3的倍数的点对有多少个? 输出这样的点对所占比例 题解: 因为是求三的倍数,我们num来记录%3=0,1, ...

  8. P1527 [国家集训队]矩阵乘法

    P1527 [国家集训队]矩阵乘法 题意: 给你一个 n×n 的矩阵,每次询问一个子矩形的第 k 小数. 题解: 整体二分稍微加强化 模板题是一个序列,现在升级成一个矩阵求,做法和原理都是一样的 使用 ...

  9. P1494 [国家集训队]小Z的袜子

    P1494 [国家集训队]小Z的袜子 题意: 有一个长度为 n 的序列c[i] .现在给出 m个询问,每次给出两个数l,r ,从编号在 l 到 r 之间的数中随机选出两个不同的数,求两个数相等的概率. ...

  10. 洛谷P1494 [国家集训队]小Z的袜子

    P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- ...

最新文章

  1. 判断人工智能是否可信的“四把尺子”
  2. ​​《自然》2020年十大科学发现出炉:病毒,冷冻电镜与快速射电暴
  3. 使用caffe训练faster-rcnn时遇到的问题总结
  4. C++Primer学习笔记:第6章 函数
  5. 【数据结构基础】-串-顺序结构的基本操作实现
  6. java 增 删 查 改_如何对java链表进行增、删、查、改操作
  7. Docker最佳实践:构建最小镜像
  8. Git 查看本地分支关联的远程分支 git branch -vv
  9. 微信公众号里面服务器配置关闭,微信公众号服务器配置无法修改
  10. SNAT、DNAT、MASQUERADE的区别
  11. 上海租房提取公积金(提醒)
  12. 缅怀2022,展望2023
  13. #程序员健康 如何解救你的鼠标手
  14. 微信小程序笔记、小程序打印
  15. 股票爬虫(java爬取东方财富)
  16. Linux 网络基础(二)---传输层
  17. CentOS 7版本下安装NVIDIA显卡驱动
  18. Python基础必掌握的文件读写操作详解
  19. Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
  20. Matlab学习卡尔曼滤波的各种实例代码 KF,EKF,UKF,CKF

热门文章

  1. 斐讯k2搭建php环境,宿舍使用斐讯K2路由器详细设置步骤
  2. 如何快速查看颜色的RGB或者十六进制代码(QQ截图,最方便)
  3. w10怎样关闭对计算机更改,w10电脑定时关机怎么设置 让w10系统自动关闭的设置方法...
  4. 关系数据库理论:范式判断、函数依赖、无损分解、正则覆盖
  5. 如何给PPT加背景音乐
  6. React项目实现导出PDF的功能
  7. html好看目录样式,HTML_CSS使用详解,目录样式类型(List Style Type) 说 - phpStudy
  8. 【位操作笔记】计算以10为底整数N的对数 普通方法
  9. Mysql(免安装版)安装、配置与卸载
  10. 程序员:办公室里的木匠