noip提高组2004 解题报告3.4题4题详解 和 2题的单调队列解法解析已完全AC

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/25 19:26:57
noip提高组2004 解题报告3.4题4题详解 和 2题的单调队列解法解析已完全AC
xTNP,ABEYFH=|@,Z!UvnH"4ɋ6% ]pKTޙsfΙqR4׫er^%Vجbvs-ށE A{,Q 매yRt]|oMjusE+Af9;q-RCyKyT Z!b^4H򿻡1KTΣh獯ɈQU}zes, SK/AzmUoБ{^l3 DaT96\!쑫CHXap ѪCY\>VdOUFC6ڡjEX!J큕 A7OpjD4o\M#QKIݣ q Mqֺ5IV­iU\^m7Tu`dTwdpZJSI~9]:XEzMb$"zk.GeeUV`FNL8Dg[Cc TA}k$ִ9 l>gN?=dnE><>w.8pte,W/]D

noip提高组2004 解题报告3.4题4题详解 和 2题的单调队列解法解析已完全AC
noip提高组2004 解题报告3.4题
4题详解 和 2题的单调队列解法解析
已完全AC

noip提高组2004 解题报告3.4题4题详解 和 2题的单调队列解法解析已完全AC
下面是我做时的题解,【详细代码可以到我的空间里去看】.每题都有.
  第二题fruit
  【O(N)】O(N)的算法就是,维护两个队列,一个是原数组【当然排序已经是NlogN了,但是这里算法核心是O(N)】,第二个是合并之后的队列,可以证明,只要每次合并之后都在这队列的末端加,这个队列必定是单调递增的.
  既然两个队列都是递增的,那么我们每次从两个队列中取出最小的两个出来合并就可以了.注意这里说的取两个最小,是先第一次从队列a,b中取两个队首较小一个,然后再第二次从队列a,b中取两个队首较小的一个.
  很显然,每次合并两个结点以后,得到的大小是严格递增的,于是我们可以维护两个表,一个是原数字A,一个是新加入的数字B.这样,每次就一定是在A和B的头部取数,在A和B的尾部删除.这样,时间复杂度就降到了O(n).因为a[i]