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

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/28 17:00:42
noip提高组2004解题报告3.4题4题详解和2题的单调队列解法解析已完全ACnoip提高组2004解题报告3.4题4题详解和2题的单调队列解法解析已完全ACnoip提高组2004解题报告3.4题4

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]