OSDN Git Service

Update monotonous-queue.md
authorMosa-Linking <42469018+Mosa-Linking@users.noreply.github.com>
Wed, 22 Aug 2018 13:05:41 +0000 (21:05 +0800)
committerGitHub <noreply@github.com>
Wed, 22 Aug 2018 13:05:41 +0000 (21:05 +0800)
docs/data-structure/novice/monotonous-queue.md

index a69908c..0ee43a5 100644 (file)
@@ -4,11 +4,11 @@
 \r
 [Sliding Window](http://poj.org/problem?id=2823)\r
 \r
-本题大意是给出一个长度为n的数组,编程输出每k个连续的数中的最大值和最小值\r
+本题大意是给出一个长度为 n 的数组,编程输出每 k 个连续的数中的最大值和最小值\r
 \r
-最常用~~暴力~~的想法很简单,对于每一段i~i+k-1的序列,逐个比较来找出最大值(和最小值),时间复杂度约为O(n*k)\r
+最常用~~暴力~~的想法很简单,对于每一段 i ~ i+k-1 的序列,逐个比较来找出最大值(和最小值),时间复杂度约为 O(n*k) \r
 \r
-很显然,这其中进行了大量重复工作,除了开头k-1个和结尾k-1个数之外,每个数都进行了k次比较,而题中100%的数据为n<=1000000,当k稍大的情况下,显然会出现TLE\r
+很显然,这其中进行了大量重复工作,除了开头 k-1 个和结尾 k-1 个数之外,每个数都进行了 k 次比较,而题中100%的数据为 n <= 1000000 ,当 k 稍大的情况下,显然会出现 TLE\r
 \r
 这时所用到的就是单调队列了\r
 \r
 \r
 "队列"指的是元素只能从队头和队尾进行操作\r
 \r
-Ps.单调队列中的"队列"与正常的队列有一定的区别,稍后会提到\r
+Ps. 单调队列中的"队列"与正常的队列有一定的区别,稍后会提到\r
 \r
 #### 例题分析\r
 \r
 有了上面"单调队列"的概念,很容易想到用单调队列进行优化\r
 \r
-要求的是每连续的k个数中的最大(最小)值,很明显,当一个数进入所要"寻找"最大值的范围中时,若这个数比其前面(先进队)的数要大,显然,前面的数会比这个数先出队且不再可能是最大值\r
+要求的是每连续的 k 个数中的最大(最小)值,很明显,当一个数进入所要"寻找"最大值的范围中时,若这个数比其前面(先进队)的数要大,显然,前面的数会比这个数先出队且不再可能是最大值\r
 \r
-也就是说——当满足以上条件时,可将前面的数"弹出",再将该数真正push进队尾\r
+也就是说——当满足以上条件时,可将前面的数"弹出",再将该数真正 push 进队尾\r
 \r
 这就相当于维护了一个递减的队列,符合单调队列的定义,减少了重复的比较次数,不仅如此,由于维护出的队伍是查询范围内的且是递减的,队头必定是该查询区域内的最大值,因此输出时只需输出队头即可\r
 \r
-显而易见的是,在这样的算法中,每个数只要进队与出队各一次,因此时间复杂度被降到了O(N)\r
+显而易见的是,在这样的算法中,每个数只要进队与出队各一次,因此时间复杂度被降到了 O(N)\r
 \r
-而由于查询区间长度是固定的,超出查询空间的值再大也不能输出,因此还需要site数组记录第i个队中的数在原数组中的位置,以弹出越界的队头\r
+而由于查询区间长度是固定的,超出查询空间的值再大也不能输出,因此还需要 site 数组记录第 i 个队中的数在原数组中的位置,以弹出越界的队头\r
 \r
 [例题代码](https://www.luogu.org/paste/dze1lw3b)\r
 \r
-Ps.此处的"队列"跟普通队列的一大不同就在于可以从队尾进行操作,c++中有相似的数据结构deque\r
+Ps. 此处的"队列"跟普通队列的一大不同就在于可以从队尾进行操作, C++ 中有相似的数据结构 deque\r
 \r
-Ps.Ps.建议不要使用deque,本题使用deque会TLE(亲测)\r
+Ps.Ps. 建议不要使用 deque ,本题使用 deque 会 TLE (亲测)\r