P8572 [JRKSJ R6] Eltaw 题解
注意到题目中给了一个奇怪的数据范围 ,考虑根号分治。
-
当 ()时, 就会比较小,所以可以预处理出 来代表 这个区间的最大值,预处理 ,查询 。
-
当 时, 较大,所以搞个前缀和来优化。查询时间复杂度 。
#include <bits/stdc++.h> using namespace std; #define int long long const int M = 707; int n, k, q; int f[M][M]; signed main() { cin.tie(nullptr) -> sync_with_stdio(false); cin >> n >> k >> q; vector<vector<int>> a(k + 1, vector<int>(n + 1)); for (int i = 1; i <= k; i ++ ) for (int j = 1; j <= n; j ++ ) cin >> a[i][j], a[i][j] += a[i][j - 1]; if (k > M) { for (int i = 1; i <= n; i ++ ) { for (int j = i; j <= n; j ++ ) { for (int id = 1; id <= k; id ++ ) { f[i][j] = max(f[i][j], a[id][j] - a[id][i - 1]); } } } } while (q -- ) { int l, r; cin >> l >> r; int ans = 0; if (k <= M) { for (int i = 1; i <= k; i ++ ) ans = max(ans, a[i][r] - a[i][l - 1]); cout << ans << '\n'; } else { cout << f[l][r] << '\n'; } } return 0; }
本文作者:tmjyh09
本文链接:https://www.cnblogs.com/tmjyh09/p/16755361.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步