40pts求调,要破防了qwq

P8818 [CSP-S 2022] 策略游戏

我也不会,错的一模一样,测试点都相同。
by wangjingxi_ @ 2024-06-25 22:04:06


@[saixingzhe](/user/652816) @[wangjingxi_](/user/1133254) 看看[这个](https://www.luogu.com.cn/discuss/837558)
by ChampionCyan @ 2024-06-27 18:23:49


@[weah964](/user/1036180) 好像没啥问题qwq,能帮忙再看一下吗
by saixingzhe @ 2024-06-27 18:38:40


@[saixingzhe](/user/652816) @[wangjingxi_](/user/1133254) 我也40分555...( ```cpp #include <bits/stdc++.h> using namespace std; //For the basic const define. const long long MAXN = 1e5 + 10; const long long LOGN = 25; const long long inf = 2147483647; const long long inm = -2147483647; //For the basic define. long long n, m, q; //For the maximum of a and b. long long mxsta[MAXN][LOGN], mxstb[MAXN][LOGN]; //For the minimum of a and b. long long mnsta[MAXN][LOGN], mnstb[MAXN][LOGN]; //For the minimum which bigger then 0 of a. long long mnbsta[MAXN][LOGN]; //For the maximum which smaller then 0 of a. long long mxssta[MAXN][LOGN]; //For the quick log2. long long logx[MAXN]; //For the quick read of long long. inline long long read() { char c = getchar(); long long x = 0, f = 1; while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); } while (c >= '0' && c <= '9') { x = (x << 3) + (x << 1) + c - '0'; c = getchar(); } return x * f; } //For the initialization. inline void init() { //Read. n = read(); m = read(); q = read(); for (long long i = 1; i <= n; i++) { long long x = read(); mnsta[i][0] = mxsta[i][0] = x; if (x >= 0) { mnbsta[i][0] = x; mxssta[i][0] = inm; } else { mxssta[i][0] = x; mnbsta[i][0] = inf; } } for (long long i = 1; i <= m; i++) mnstb[i][0] = mxstb[i][0] = read(); //Prepare for the quick log2. logx[1] = 0; logx[2] = 1; for (long long i = 3; i <= max(n, m); i++) logx[i] = logx[i >> 1] + 1; //Prepare for Sprase Tables. for (long long j = 1; j <= logx[n]; j++) for (long long i = 1; i + (1 << j) - 1 <= n; i++) { long long s = i + (1 << (j - 1)); mxsta[i][j] = max(mxsta[i][j - 1], mxsta[s][j - 1]); mxssta[i][j] = max(mxssta[i][j - 1], mxssta[s][j - 1]); mnsta[i][j] = min(mnsta[i][j - 1], mnsta[s][j - 1]); mnbsta[i][j] = min(mnbsta[i][j - 1], mnbsta[s][j - 1]); } for (long long j = 1; j <= logx[m]; j++) for (long long i = 1; i + (1 << j) - 1 <= m; i++) { long long s = i + (1 << (j - 1)); mxstb[i][j] = max(mxstb[i][j - 1], mxstb[s][j - 1]); mnstb[i][j] = min(mnstb[i][j - 1], mnstb[s][j - 1]); } } //For the O(1) query of max. inline long long max_query(long long l, long long r, long long f[MAXN][LOGN]) { long long s = logx[r - l + 1]; return max(f[l][s], f[r - (1 << s) + 1][s]); } //For the O(1) query of min. inline long long min_query(long long l, long long r, long long f[MAXN][LOGN]) { long long s = logx[r - l + 1]; return min(f[l][s], f[r - (1 << s) + 1][s]); } //Solve the problem. inline void solve() { long long l1, r1, l2, r2; l1 = read(), r1 = read(); l2 = read(), r2 = read(); long long maxa = max_query(l1, r1, mxsta); long long mina = min_query(l1, r1, mnsta); long long mxsa = max_query(l1, r1, mxssta); long long mnba = min_query(l1, r1, mnbsta); long long maxb = max_query(l2, r2, mxstb); long long minb = min_query(l2, r2, mnstb); long long ans = inm; ans = max(ans, maxa * (maxa >= 0 ? minb : maxb)); ans = max(ans, mina * (mina >= 0 ? minb : maxb)); if (mxsa != inm) ans = max(ans, mxsa * (mxsa >= 0 ? minb : maxb)); if (mnba != inf) ans = max(ans, mnba * (mnba >= 0 ? minb : maxb)); printf("%lld\n", ans); } int main() { //Initialization. init(); //For q times use the solve function. while (q--) solve(); return 0; } ```
by ChampionCyan @ 2024-06-28 10:55:18


@[saixingzhe](/user/652816) 就是这个问题!!! 我的代码把 ```cpp ans = max(ans, maxa * (maxa >= 0 ? minb : maxb)); ans = max(ans, mina * (mina >= 0 ? minb : maxb)); if (mxsa != inm) ans = max(ans, mxsa * (mxsa >= 0 ? minb : maxb)); if (mnba != inf) ans = max(ans, mnba * (mnba >= 0 ? minb : maxb)); ``` 改成 ```cpp if (maxa < 0) { if (maxb < 0) ans = mina * maxb; else ans = maxa * maxb; } else if (mina >= 0) { if (minb >= 0) ans = maxa * minb; else ans = mina * minb; } else { if (maxb < 0) ans = mina * maxb; else if (minb >= 0) ans = maxa * minb; else ans = max(mnba * minb, mxsa * maxb); } ``` 就过了!
by ChampionCyan @ 2024-06-28 11:06:18


@[wangjingxi_](/user/1133254) @[saixingzhe](/user/652816) 看看[这个](https://www.luogu.com.cn/discuss/840533)!
by ChampionCyan @ 2024-06-28 11:15:34


谢谢大佬,已关。
by wangjingxi_ @ 2024-06-28 19:46:47


@[weah964](/user/1036180) 谢谢,已关
by saixingzhe @ 2024-06-28 20:37:26


|