这段代码在功能上是正确的,但存在一些质量和可读性上的问题
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