单调队列及其应用.doc

单调队列及其应用.doc

ID:56367836

大小:93.50 KB

页数:16页

时间:2020-06-12

单调队列及其应用.doc_第1页
单调队列及其应用.doc_第2页
单调队列及其应用.doc_第3页
单调队列及其应用.doc_第4页
单调队列及其应用.doc_第5页
资源描述:

《单调队列及其应用.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、COCI2009Ograda_题目单调队列及其应用单调队列,望文生义,就是指队列中的元素是单调的。如:{a1,a2,a3,a4……an}满足a1<=a2<=a3……<=an,a序列便是单调递增序列。同理递减队列也是存在的。单调队列的出现可以简化问题,队首元素便是最大(小)值,这样,选取最大(小)值的复杂度便为O(1),由于队列的性质,每个元素入队一次,出队一次,维护队列的复杂度均摊下来便是O(1)。如何维护单调队列呢,以单调递增序列为例:1、如果队列的长度一定,先判断队首元素是否在规定范围内,如果超范围则增长队首。2、每次加入元素时和队尾比较,如果当前元素小于队尾且队列

2、非空,则减小尾指针,队尾元素依次出队,直到满足队列的调性为止要特别注意头指针和尾指针的应用。下面介绍单调队列的具体应用:一、单调队列的直接应用1.合并果子【问题描述】在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子

3、的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。例如有3种果子,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。【输入文件】输入文件fruit.in包括两行,第一行是一个整数n(1<=n<=10000),表示果子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1<=ai<=20000)是第i种果子的数目。【输出文件】输出文件fruit.

4、Out包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于231。【样例输入】3129【样例输出】15【数据规模】对于30%的数据,保证有n<=1000;对于50%的数据,保证有n<=5000;对于全部的数据,保证有n<=10000。分析:这个题目非常的经典,发放也很多,可以采用快排或者堆,其思想都是选取当前最小的两个堆进行合并。复杂度均为O(nlOgn),如果用有序队列维护,时间复杂度为O(n)。每次选取进行合并的两堆,不是最先给定的堆,就是合并最初堆若干次后得到的新堆,所以需要维护两个单调递增队列,一个队列存最初给定的堆的值(1),一个存合

5、并后得到的新值(2)。每次选择时有三种状态:1.选取队一的队首两个2.选取队2的的队首两个-16–2011-08-09COCI2009Ograda_题目3.选取二者队首各一个只需对每个队列的指针做相应的更改。特别注意初始化。这道题很好的运用了题目中决策的单调性,对初始对经行排序,保证了其单调性。而对于新产生的堆来说,一旦有新元素加入其中,则新元素一定大于原有元素。(很显然,由于队列1的单调性)。也就是说,队列的单调性是自然而然的。是不需要维护的。要善于观察分析,才能发现。【程序代码】prOgrambecause_Of_lOve;vara,b:array[1..10000

6、0]OflOngint;h1,h2,t2,temp,n,i,ans:lOngint;functiOnmin(a,b,c:lOngint):lOngint;beginifamiddOdec(j);ifi<=jthenbeg

7、intemp:=a[i];a[i]:=a[j];a[j]:=temp;inc(i);dec(j);-16–2011-08-09COCI2009Ograda_题目end;untili>j;ifi>2;//保证程序在需要的地方停止,由于要选极小值sOrt(1,n);a[n+1]:=maxlOngint>>2;//作

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。