单调队列

bzoj1047 理想的正方形

题目大意:求a*b的矩阵中一个n*n的子矩阵,使得子矩阵的最大值和最小值的差最小。

思路:一开始认为能用二维线段树a掉,但lcomyn大神写了一下,结果T了,于是就寻找新的写法。借鉴了斜率优化的思路,发现单调队列可以优越的做到O(ab)的求出整个矩阵中每个点左面延伸n位的最值。我们用行上的单调队列维护出这个之后,再从列上单调队列一下,就能求出一个n*n子矩阵的最值了,然后比较一下,输出答案。注意这里单调队列中的是下标(这样写可能会有一些好处),所以写的时候要对应到数组中。

View Code

 

你可能感兴趣的:(队列)