P3865 【模板】ST 表
#include <iostream> #include <cstdio> #include <cmath> using namespace std; const int N = 1e5 + 10; int n, m; int a[N]; int f[N][20]; int mp[N]; void ST_prework() { for(int i = 1; i <= n; i++) f[i][0] = a[i]; int t = log(n) / log(2); for(int j = 1; j <= t; j++) for(int i = 1; i <= n - (1 << j) + 1; i++) f[i][j] = max(f[i][j - 1], f[i + (1 << j - 1)][j - 1]); } int ST_query(int l, int r) { int k = mp[r - l + 1]; return max(f[l][k], f[r - (1 << k) + 1][k]); } int main() { cin >> n >> m; for(int i = 1; i <= n; i++) scanf("%d", &a[i]); for(int i = 0; i <= n; i++) mp[i] = log(i) / log(2); ST_prework(); for(int i = 1; i <= m; i++) { int l, r; scanf("%d%d" ,&l, &r); printf("%d\n", ST_query(l, r)); } return 0; }
二维ST表,二维矩阵内最值
#include <iostream> #include <cstdio> #include <cmath> using namespace std; const int N = 300; int n, b, k; int h[N][N]; int f[N][N][10], F[N][N][10]; int mp[N]; void ST_prework() { for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) f[i][j][0] = h[i][j], F[i][j][0] = h[i][j]; int t = log2(n); for(int k = 1; k <= t; k++) for(int i = 1; i <= n - (1 << k) + 1; i++) for(int j = 1; j <= n - (1 << k) + 1; j++) { f[i][j][k] = max(max(f[i][j][k - 1], f[i + (1 << k - 1)][j][k - 1]), max(f[i][j + (1 << k - 1)][k - 1], f[i + (1 << k - 1)][j + (1 << k - 1)][k - 1])); F[i][j][k] = min(min(F[i][j][k - 1], F[i + (1 << k - 1)][j][k - 1]), min(F[i][j + (1 << k - 1)][k - 1], F[i + (1 << k - 1)][j + (1 << k - 1)][k - 1])); } } int ST_query(int x1, int y1, int x2, int y2) { int len = mp[b]; return max(max(f[x1][y1][len], f[x2 - (1 << len) + 1][y1][len]), max(f[x1][y2 - (1 << len) + 1][len], f[x2 - (1 << len) + 1][y2 - (1 << len) + 1][len])) - (min(min(F[x1][y1][len], F[x2 - (1 << len) + 1][y1][len]), min(F[x1][y2 - (1 << len) + 1][len], F[x2 - (1 << len) + 1][y2 - (1 << len) + 1][len]))); } int main() { cin >> n >> b >> k; for(int i = 1; i <= n; i++) for(int j = 1; j <= n ; j++) scanf("%d", &h[i][j]); for(int i = 1; i <= n; i++) mp[i] = log2(i); ST_prework(); while(k--) { int x, y; scanf("%d%d", &x, &y); printf("%d\n", ST_query(x, y, x + b - 1, y + b - 1)); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】