二维RMQ求矩阵最值学习、
来源:互联网 发布:抢购秒杀软件 编辑:程序博客网 时间:2024/05/18 02:00
学习博客:blackcat
练习题:传送门
#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <ctime>#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <vector>#include <queue>#include <stack>#include <map>#include <set>#include <utility>using namespace std;#define LL long long#define pb push_back#define mk make_pair#define pill pair<int, int>#define mst(a, b)memset(a, b, sizeof a)#define REP(i, x, n)for(int i = x; i <= n; ++i)const int MOD = 1e9 + 7;const int qq = 505 + 10;const int INF = 1e9 + 10;int dp[qq][qq][10][10];int bitx[1005];int a[qq][qq];const int inf = 0x7fffffff;void ST_2D(int n, int m) {// Initbitx[1] = 0;for(int i = 2; i <= max(n, m); i <<= 1) {bitx[i] = bitx[i >> 1] + 1; }for(int i = 2; i <= max(n, m); ++i) {if(bitx[i] == 0)bitx[i] = bitx[i - 1];}for(int i = 1; i <= n; ++i) {for(int j = 1; j <= m; ++j) {dp[i][j][0][0] = a[i][j];}}for(int k = 0; (1 << k) <= n; ++k) {for(int l = 0; (1 << l) <= m; ++l) {if(l == 0 && k == 0)continue;for(int i = 1; i + (1 << k) - 1 <= n; ++i) {for(int j = 1; j + (1 << l) - 1 <= m; ++j) {if(!k)dp[i][j][k][l] = max(dp[i][j][k][l - 1], dp[i][j + (1 << (l - 1))][k][l - 1]);elsedp[i][j][k][l] = max(dp[i][j][k - 1][l], dp[i + (1 << (k - 1))][j][k - 1][l]);}}}}}int Query(int x1, int y1, int x2, int y2) {// Queryint k1 = bitx[x2 - x1 + 1], k2 = bitx[y2 - y1 + 1];int m1 = dp[x1][y1][k1][k2];int m2 = dp[x2 - (1 << k1) + 1][y1][k1][k2];int m3 = dp[x1][y2 - (1 << k2) + 1][k1][k2];int m4 = dp[x2 - (1 << k1) + 1][y2 - (1 << k2) + 1][k1][k2];return max(max(m1, m2), max(m3, m4));}int main(){int n, m, k, q;scanf("%d%d%d%d", &n, &m, &k, &q);for(int i = 1; i <= n; ++i) {for(int j = 1; j <= m; ++j) {a[i][j] = inf;}}for(int x, y, t, i = 1; i <= q; ++i) {scanf("%d%d%d", &x, &y, &t);a[x][y] = t;}ST_2D(n, m);int ans = inf;for(int i = 1; i + k - 1 <= n; ++i) {for(int j = 1; j + k - 1 <= m; ++j) {ans = min(ans, Query(i, j, i + k - 1, j + k - 1));}}if(ans == inf)ans = -1;printf("%d\n", ans);return 0;}
阅读全文
0 0
- 二维RMQ求矩阵最值学习、
- RMQ求区间最值
- RMQ求区间最值
- RMQ 求区间最值
- RMQ求区间最值问题
- RMQ求区间最值 nlog(n)
- RMQ算法求区间最值
- RMQ算法,求区间最值
- RMQ求区间最值问题
- POJ 2019 Cornfields(二维RMQ 最值查询模板)
- HDU3630----最大子矩阵+二维RMQ
- 树状数组求区间最值(RMQ)
- poj 3875 RMQ或线段树求区间最值
- poj 3264 Balanced Lineup(RMQ求区间最值)
- POJ - 3264 Balanced Lineup (RMQ问题求区间最值)
- POJ 3264 Balanced Lineup(RMQ求区间最值)
- RMQ---求区间最值(poj 3264)
- HiHo #1068 : RMQ-ST算法 【ST求区间最值】
- 第4篇 关联式容器(associative)
- 从老板的裤裆拉链看 Google 管理之道
- Quaternion 四元数
- 容器在 Weave 中如何通信和隔离?- 每天5分钟玩转 Docker 容器技术(65)
- 浅谈windows下,shutdown.bat无法关闭tomcat服务器
- 二维RMQ求矩阵最值学习、
- 据说年薪30万的Android程序员必须知道的帖子
- QT
- Openpilot GCS Linux系统下开发环境安装
- 利用jdbc对数据表进行分页,操作存储过程(有参与无参,返回游标),函数等
- 大数据预科班1,2
- 对I/O阻塞、非阻塞;同步I/O、异步I/O的理解
- .tar.bz2文件的解压命令
- GD库图像处理