欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 【子矩阵——优先队列】

【子矩阵——优先队列】

2025/2/7 13:24:48 来源:https://blog.csdn.net/m0_73669127/article/details/145309664  浏览:    关键词:【子矩阵——优先队列】

题目

代码

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e3 + 10;
const int mod = 998244353;
int g[N][N], ymax[N][N], ymin[N][N];
deque<int> qxmax[N], qxmin[N], qymax[N], qymin[N];int main() {ios::sync_with_stdio(0);cin.tie(0);int n, m, a, b;cin >> n >> m >> a >> b;// 初始化矩阵for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> g[i][j];}}// 垂直方向的滑动窗口(按列计算)for (int j = 1; j <= m; j++) {for (int i = 1; i <= n; i++) {// 最大值队列while (!qymax[j].empty() && g[qymax[j].back()][j] <= g[i][j]) qymax[j].pop_back();qymax[j].push_back(i);// 最小值队列while (!qymin[j].empty() && g[qymin[j].back()][j] >= g[i][j]) qymin[j].pop_back();qymin[j].push_back(i);// 窗口内数据有效if (i >= a) {if (i - qymax[j].front() + 1 > a) qymax[j].pop_front();if (i - qymin[j].front() + 1 > a) qymin[j].pop_front();ymax[i][j] = g[qymax[j].front()][j]; // 存储具体值ymin[i][j] = g[qymin[j].front()][j]; // 存储具体值}}}// 水平方向的滑动窗口(按行计算)ll res = 0;for (int i = a; i <= n; i++) {for (int j = 1; j <= m; j++) {// 最大值队列while (!qxmax[i].empty() && ymax[i][qxmax[i].back()] <= ymax[i][j]) qxmax[i].pop_back();qxmax[i].push_back(j);// 最小值队列while (!qxmin[i].empty() && ymin[i][qxmin[i].back()] >= ymin[i][j]) qxmin[i].pop_back();qxmin[i].push_back(j);// 窗口内数据有效if (j >= b) {if (j - qxmax[i].front() + 1 > b) qxmax[i].pop_front();if (j - qxmin[i].front() + 1 > b) qxmin[i].pop_front();res = (res + (ll)ymax[i][qxmax[i].front()] * ymin[i][qxmin[i].front()]) % mod;}}}// 输出结果cout << res << endl;return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com