种树,洛谷之提高历练地,堆

原创 2018年04月16日 11:42:57

正题

      第五题:种树

      这题看上去很烦,实际上也很烦。。。

      那么我们第一个想到的就是用堆维护最大值。

      我们把多步拆成多个一步来求解,当k=1的时候,那么答案就是最大值。

      当k=2时,要么就是多选一个不相邻的,要么就是同时选相邻的,为什么旁边两个要么同时选要么同时不选呢?可能存在选其中一个再选与其不相邻的一个吗?很明显是不可能的,因为当前选出来的已经是最大的了,所以让旁边的去选另外一个倒不如让最大的去累加。

      我们就照这样推下去,就会发现每次种下一棵树,就不能重复种了,当它当前的距离最近的左边空地和距离最近的右边空地还是可以种树的,那么我们就用一个tf数组来维护这个东西。

      以上是用来解释大神ZZY的博客的,,,大佬博客传送门

代码<不要说我抄。。逃>

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
using namespace std;

int n,k;
int s[500010];
bool tf[500010];
struct node{
	int x,d;
	bool operator<(const node y)const{
		return d<y.d;
	}
};
priority_queue<node> f;
long long ans=0;
int left[500010],right[500010];

int main(){
	scanf("%d %d",&n,&k);
	for(int i=1;i<=n;i++){
		scanf("%d",&s[i]);
		f.push((node){i,s[i]});
		left[i]=i-1;right[i]=i+1;
	}
	memset(tf,false,sizeof(tf));
	left[n+1]=n;right[0]=1;
	while(k--){
		while(tf[f.top().x]==true) f.pop();
		node now=f.top();
		f.pop();
		if(now.d<0) break;
		ans+=now.d;
		tf[left[now.x]]=tf[right[now.x]]=true;
		s[now.x]=s[left[now.x]]+s[right[now.x]]-s[now.x];
		now.d=s[now.x];
		left[now.x]=left[left[now.x]];
		right[now.x]=right[right[now.x]];
		left[right[now.x]]=now.x;
		right[left[now.x]]=now.x;
		f.push(now);
	}
	printf("%lld",ans);
}


版权声明: https://blog.csdn.net/Deep_Kevin/article/details/79958449

SuperGCD,洛谷之提高历练地,数论(3-5)

前话      数论就是研究整数的理论。包括公约公倍数、质数、欧拉定理和同余方程等。正文       其实数论不止那么简单正文      第一题:SuperGCD      这一题就是很烦的代码加很烦...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-07 17:19:43
  • 11

[SDOI2009]E&D,洛谷之提高历练地,博弈论(3-6)

正题      第四题:[SDOI2009]E&amp;amp;D      这题不是如此的简单,因为它要涉及到找规律和Sg函数。      首先的,我们可以打一个表来观察之间的关系。      Sg...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-08 13:48:45
  • 13

序列合并,洛谷之提高历练地,堆

正文      第三题:序列合并      我们很容易就可以得到一个结论,将A,B从小到大排序后,可以满足A1+B1&amp;lt;=A1+B2&amp;lt;=A1+B3...      我们也可以...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-16 11:18:09
  • 21

[HNOI2003]操作系统,洛谷之提高历练地,堆

正题      第二题:[HNOI2003]操作系统      我们看到了“优先级最高”这几个字,我们就想到了用堆来维护bool operator&amp;lt;(const node y)const...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-16 10:55:04
  • 21

[POI2008]BLO-Blockade,洛谷之提高历练地,强连通分量

正题      [POI2008]BLO-Blockade      这一题很神奇啊~      我们来想想两个点不能连通和强连通有什么关系。      那么其实很明显,如果当前点所遍历到的子节点不能...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-22 14:24:13
  • 4

食物链,洛谷之提高历练地,并查集

正文      第二题:食物链      这题经典啊!!!我们可以想象,如果我们可以搞一个并查集来维护x的同伙,天敌和食物就好了。      我们想到了开三倍空间来维护x的天敌,同伙和食物。     ...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-15 15:57:03
  • 15

无线通讯网,洛谷之提高历练地,最小生成树

正题      第三题:无线通讯网      这题中的卫星电话,就指的是可以把原图分成S个联通块后,就可以互相联通。      那我们要把原图分成S个联通块,那么我们只需要选中P-S条最短的边(当然是...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-11 09:28:35
  • 4

货车运输,洛谷之提高历练地,倍增

正题       第一题:货车运输       这道题很经典啊~~       直接建立倍增关系式求LCA即可。       不妨设i的第2^j个爸爸是f[i][j],而这条路径上的最小值设为mmin...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-20 11:48:01
  • 9

跑路,洛谷之提高历练地,倍增

正题      跑路      这题看上去好像无从下手,又有重边,又有自环,但是想一想,其实都是一样的。      我们可不可以先处理一下一步可以到达的边,当然,一步可以到达当且仅当i到j的路径长度为...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-20 14:51:22
  • 12

独木桥,洛谷之提高历练地,神奇的解法

正题      这题很搞笑啊~~      下面是转载洛谷 I_am_wx的题解。      你在桥上看风景,看风景的人在轰炸机上看着你。      首先自行脑补一下,假装你正在20000米高空的轰炸...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-20 07:39:54
  • 2
收藏助手
不良信息举报
您举报文章:种树,洛谷之提高历练地,堆
举报原因:
原因补充:

(最多只允许输入30个字)