From 94260a708dd9275417774ab05e88b2aae0b98d3a Mon Sep 17 00:00:00 2001 From: oncsr Date: Thu, 23 Oct 2025 20:16:30 +0900 Subject: [PATCH] =?UTF-8?q?[20251023]=20BOJ=20/=20D4=20/=20=EC=88=98?= =?UTF-8?q?=EC=97=B4=EA=B3=BC=20=EC=BF=BC=EB=A6=AC=200=20/=20=EA=B6=8C?= =?UTF-8?q?=ED=98=81=EC=A4=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...352\263\274 \354\277\274\353\246\254 0.md" | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 "khj20006/202510/23 BOJ D4 \354\210\230\354\227\264\352\263\274 \354\277\274\353\246\254 0.md" diff --git "a/khj20006/202510/23 BOJ D4 \354\210\230\354\227\264\352\263\274 \354\277\274\353\246\254 0.md" "b/khj20006/202510/23 BOJ D4 \354\210\230\354\227\264\352\263\274 \354\277\274\353\246\254 0.md" new file mode 100644 index 00000000..b5c0c91a --- /dev/null +++ "b/khj20006/202510/23 BOJ D4 \354\210\230\354\227\264\352\263\274 \354\277\274\353\246\254 0.md" @@ -0,0 +1,93 @@ +```cpp +#include +using namespace std; + +int N, Q, sq, s[100001]{}; +deque v[200001]{}; +int c[200001]{}, cc[801]{}, ans[100000]{}; +tuple qs[100000]{}; + +int main() { + cin.tie(0)->sync_with_stdio(0); + + cin >> N; + sq = sqrt(N); + for (int i = 1; i <= N; i++) { + cin >> s[i]; + s[i] += s[i - 1]; + } + + cin >> Q; + for (int i = 0; i < Q; i++) { + auto& [l, r, x] = qs[i]; + cin >> l >> r; + x = i; + l--; + } + + sort(qs, qs + Q, [](auto a, auto b) -> bool { + auto [al, ar, ax] = a; + auto [bl, br, bx] = b; + if (al / sq == bl / sq) return ar < br; + return al / sq < bl / sq; + }); + + int l = 0, r = 0; + v[100000].push_back(0); + c[100000]++, cc[100000 / sq]++; + for (int i = 0; i < Q; i++) { + auto [pl, pr, x] = qs[i]; + while (r < pr) { + int z = s[++r] + 100000; + if (!v[z].empty()) { + c[v[z].back() - v[z].front()]--; + cc[(v[z].back() - v[z].front()) / sq]--; + } + v[z].push_back(r); + c[v[z].back() - v[z].front()]++; + cc[(v[z].back() - v[z].front()) / sq]++; + } + while (pr < r) { + int z = s[r--] + 100000; + c[v[z].back() - v[z].front()]--; + cc[(v[z].back() - v[z].front()) / sq]--; + v[z].pop_back(); + if (!v[z].empty()) { + c[v[z].back() - v[z].front()]++; + cc[(v[z].back() - v[z].front()) / sq]++; + } + } + while (l < pl) { + int z = s[l++] + 100000; + c[v[z].back() - v[z].front()]--; + cc[(v[z].back() - v[z].front()) / sq]--; + v[z].pop_front(); + if (!v[z].empty()) { + c[v[z].back() - v[z].front()]++; + cc[(v[z].back() - v[z].front()) / sq]++; + } + } + while (pl < l) { + int z = s[--l] + 100000; + if (!v[z].empty()) { + c[v[z].back() - v[z].front()]--; + cc[(v[z].back() - v[z].front()) / sq]--; + } + v[z].push_front(l); + c[v[z].back() - v[z].front()]++; + cc[(v[z].back() - v[z].front()) / sq]++; + } + + for (int i = 800; i >= 0; i--) if (cc[i]) { + for (int j = sq * (i + 1) - 1; j >= sq * i; j--) if (c[j]) { + ans[x] = j; + break; + } + break; + } + } + + for (int i = 0; i < Q; i++) cout << ans[i] << '\n'; + +} +```