数列极差问题-STL优先队列-贪心

Posted wuwendongxi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数列极差问题-STL优先队列-贪心相关的知识,希望对你有一定的参考价值。

Description

  在黑板上写了N个正整数组成的一个数列,进行如下操作: 每次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上 剩下一个数,在所有按这种操作方式最后得到的数中,最大的为max,最小的为min, 则该数列的极差定义为M=max-min。
  请你编程,对于给定的数列,计算极差。

Input

  第一个数N表示 正整数序列长度(0<=N<=50000),随后是N个正整数。

Output

  计算极差

Sample Input

3
1
2
3

Sample Output

2


思路

  • 多试几次发现规律/贪心策略:先合并小数得到最大值;先合并大数得到最小值。

代码

#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
priority_queue<int> qmax;
priority_queue<int,vector<int>, greater<int> > qmin;
int n,a[50005];
int main()
{
	scanf("%d",&n);
	for(int i=1,temp;i<=n;++i) scanf("%d",&temp),qmax.push(temp),qmin.push(temp);
	for(int i=1;i<n;++i)
	{
		int maxx=qmax.top(); qmax.pop(); maxx*=qmax.top(); qmax.pop(); qmax.push(maxx+1);
		int minn=qmin.top(); qmin.pop(); minn*=qmin.top(); qmin.pop(); qmin.push(minn+1);
	}
	printf("%d
",qmin.top()-qmax.top());
	return 0;
}




以上是关于数列极差问题-STL优先队列-贪心的主要内容,如果未能解决你的问题,请参考以下文章

[M贪心] lcLCP30. 魔塔游戏(STL优先队列+堆+贪心)

[M贪心] lcLCP30. 魔塔游戏(STL优先队列+堆+贪心)

[M贪心] lc1353. 最多可以参加的会议数目(扫描线+STL优先队列)

「一本通 1.1 练习 1」数列极差

HDU 6301 (贪心+优先队列)

BZOJ 1150 [CTSC2007]数据备份Backup(贪心+优先队列)