求助ST表

P2471 [SCOI2007] 降雨量

这段代码在功能上是正确的,但存在一些质量和可读性上的问题
by chenfeizhou @ 2023-07-09 21:44:43


@[AAA404](/user/723198) 忽略了一个重要的细节。在数组f的定义中,f[maxn][N]中的maxn应该是根据题目中的要求来确定的。根据题目的输入数据范围,应将其修改为f[N][maxn]。
by chenfeizhou @ 2023-07-09 21:57:53


然后删掉一些宏定义等优化 ~~就可以了吧~~~ ```cpp #include<bits/stdc++.h> using namespace std; const int N = 50005; const int maxn = 20; // 修改为20 int n, m; int f[N][maxn], r[N], y[N], Log[N], Y, X; inline int RMQ(int x, int y) { if (x > y) return 0; int l = Log[y - x + 1]; return max(f[x][l], f[y - (1 << l) + 1][l]); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; Log[1] = 0; for (int i = 2; i <= N; i++) Log[i] = Log[i >> 1] + 1; for (int i = 1; i <= n; i++) { cin >> y[i] >> r[i]; } for (int i = 1; i <= n; i++) { f[i][0] = r[i]; } for (int j = 1; j < maxn; j++) { // 修改为 < maxn for (int i = 1; i + (1 << j) - 1 <= n; i++) { f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]); } } cin >> m; for (int i = 1; i <= m; i++) { cin >> Y >> X; int p1 = lower_bound(y + 1, y + n + 1, Y) - y; int p2 = lower_bound(y + 1, y + n + 1, X) - y; bool f1 = (p1 == n + 1 || y[p1] != Y) ? false : true; bool f2 = (p2 == n + 1 || y[p2] != X) ? false : true; if (!f1 && !f2) { cout << "maybe" << endl; continue; } if (f1 && f2) { if (r[p1] < r[p2]) { cout << "false" << endl; continue; } if (Y + 1 == X) { cout << "true" << endl; continue; } if (p1 + 1 == p2) { cout << "maybe" << endl; continue; } int maxx = RMQ(p1 + 1, p2 - 1); if (maxx >= r[p2]) { cout << "false" << endl; continue; } if (p2 - p1 == X - Y) { cout << "true" << endl; } else { cout << "maybe" << endl; } } else if (f1) { if (p1 + 1 == p2) { cout << "maybe" << endl; continue; } int maxx = RMQ(p1 + 1, p2 - 1); if (maxx >= r[p1]) { cout << "false" << endl; } else { cout << "maybe" << endl; } } else { if (p1 == p2) { cout << "maybe" << endl; continue; } int maxx = RMQ(p1, p2 - 1); if (maxx >= r[p2]) { cout << "false" << endl; } else { cout << "maybe" << endl; } } } return 0; } ```
by chenfeizhou @ 2023-07-09 22:00:22


@[chenfeizhou](/user/731596) 已过,谢谢
by AAA404 @ 2023-07-10 07:24:57


|