RMQ的问题

最近看了rmq,先学的的st算法,实际就是用动态规划来解的。

设状态d[i][j]表示从第i个位置起,2^j个数的最大值。状态转移方程:d[i][j] = max(d[i][j - 1], d[i + (1 << (j - 1))][j - 1]);初始状态d[i][j] = w[i][j](w[i][j]表示要求的数组),复杂度为O(n*logn)的预处理,O(1)的查询,

题目:POJ 3264,可以完全套上面的方程

POJ 3369,预处理的时候加一个处理两个端点的条件,查询也加上

上面的都是一维的情况,也可以处理二维的情况。

题目:POJ 2019 这个题目比较特殊,查询的都是正方形,而且边长固定。可以设d[i][j][k]表示从第i行,第j列位起,2^j为正方形边长的最大值。状态转移方程:d[i][j][k] = max(max(d[i][j][k - 1], d[i + (1 << (k - 1))][j][k - 1]), max(d[i][j + (1 << (k - 1))][k - 1], d[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]);));;初始状态d[i][j][0] = w[i][j](w[i][j]表示要求的数组),复杂度为O(n*n*logb)的预处理,O(1)的查询,当然如果不是正方形,还要再加一维,就可以表示行列的长度,复杂度为O(n*n*logb * log(b))。不过很可惜,这道题的规模实在太小,直接暴力也能过。

发布了113 篇原创文章 · 获赞 12 · 访问量 9万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章