From 946125fe06537f27e2123d5e4a3c99c0ebb8179d Mon Sep 17 00:00:00 2001 From: TooYoungTooSimp <6648049+TooYoungTooSimp@users.noreply.github.com> Date: Sun, 4 Aug 2019 14:04:44 +0800 Subject: [PATCH] Sun, 04 Aug 2019 14:04:44 +0800 --- nowcoder884/C.cpp | 34 ++++++++++++++------------------- nowcoder885/.vscode/launch.json | 20 ------------------- nowcoder885/.vscode/tasks.json | 18 ----------------- 3 files changed, 14 insertions(+), 58 deletions(-) delete mode 100644 nowcoder885/.vscode/launch.json delete mode 100644 nowcoder885/.vscode/tasks.json diff --git a/nowcoder884/C.cpp b/nowcoder884/C.cpp index c54283a..4178911 100644 --- a/nowcoder884/C.cpp +++ b/nowcoder884/C.cpp @@ -18,6 +18,7 @@ struct SegTree struct Node { ll sum, lmx, lmn, rmx, rmn; + void init(const int x) { sum = x, lmx = x, lmn = x, rmx = x, rmn = x; } } N[sz << 2]; void merge(Node &c, Node &l, Node &r) { @@ -27,17 +28,17 @@ struct SegTree c.lmx = max(l.lmx, l.sum + r.lmx); c.rmx = max(r.rmx, r.sum + l.rmx); } - void update(int k) { merge(N[k], N[L(k)], N[R(k)]); } void build(int k, int l, int r, int *a) { - if (l == r - 1) return void(N[k].mn = N[k].mx = 1); + if (l == r - 1) return N[k].init(a[l]); int m = avg(l, r); build(L(k), l, m, a); build(R(k), m, r, a); - update(k); + merge(N[k], N[L(k)], N[R(k)]); } Node query(int k, int l, int r, int x, int y) { + if (x >= y) return {}; if (x <= l && r <= y) return N[k]; int m = avg(l, r); if (y <= m) return query(L(k), l, m, x, y); @@ -68,35 +69,28 @@ int main() scanf("%d", &n); for (int i = 1; i <= n; i++) read(a[i]); for (int i = 1; i <= n; i++) read(b[i]); + a[0] = a[n + 1] = -inf; v.clear(), v.push_back(0); for (int i = 1; i <= n; i++) { - while (a[v.back()] > a[i]) v.pop_back(); - l[i] = v.back(); - v.push_back(i); + while (a[v.back()] >= a[i]) v.pop_back(); + l[i] = v.back(), v.push_back(i); } v.clear(), v.push_back(n + 1); for (int i = n; i >= 1; i--) { - while (a[v.back()] > a[i]) v.pop_back(); - r[i] = v.back(); - v.push_back(i); + while (a[v.back()] >= a[i]) v.pop_back(); + r[i] = v.back(), v.push_back(i); } - /*for (int i = 1; i <= n; i++) printf("%2d ", a[i]); - putchar('\n'); - for (int i = 1; i <= n; i++) printf("%2d ", l[i]); - putchar('\n'); - for (int i = 1; i <= n; i++) printf("%2d ", r[i]); - putchar('\n');*/ st.build(1, 0, n, b + 1); long long ans = 0; for (int i = 1; i <= n; i++) { - int lb = l[i] + 1, rb = r[i]; - auto resl = st.query(1, 0, n, lb, i); - auto resr = st.query(1, 0, n, i, rb); - ans = max(ans, a[i] < 0 ? a[i] * (resl.rmn + a[i] + resr.lmn) : - a[i] * (resl.rmx + a[i] + resr.lmx)); + auto resl = st.query(1, 0, n, l[i], i - 1); + auto resr = st.query(1, 0, n, i, r[i] - 1); + ans = max(ans, a[i] < 0 ? a[i] * (resl.rmn + b[i] + resr.lmn) : + a[i] * (resl.rmx + b[i] + resr.lmx)); } + printf("%lld", ans); return 0; } \ No newline at end of file diff --git a/nowcoder885/.vscode/launch.json b/nowcoder885/.vscode/launch.json deleted file mode 100644 index ada0aaf..0000000 --- a/nowcoder885/.vscode/launch.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - // 使用 IntelliSense 了解相关属性。 - // 悬停以查看现有属性的描述。 - // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "cl.exe build and debug active file", - "type": "cppvsdbg", - "request": "launch", - "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "preLaunchTask": "cl.exe build active file" - } - ] -} \ No newline at end of file diff --git a/nowcoder885/.vscode/tasks.json b/nowcoder885/.vscode/tasks.json deleted file mode 100644 index 6b7a3f6..0000000 --- a/nowcoder885/.vscode/tasks.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "tasks": [ - { - "type": "shell", - "label": "cl.exe build active file", - "command": "cl.exe", - "args": [ - "/ID:\\PortableApps\\MSYS2\\mingw64\\include\\c++\\9.1.0\\x86_64-w64-mingw32", - "/Zi", - "/EHsc", - "/Fe:", - "${fileDirname}\\${fileBasenameNoExtension}.exe", - "${file}" - ] - } - ], - "version": "2.0.0" -} \ No newline at end of file