From 1b0edafd84bde204613e536e34aa70b583ded3ea Mon Sep 17 00:00:00 2001 From: Baoshuo Ren Date: Fri, 21 Jan 2022 09:08:59 +0800 Subject: [PATCH] =?UTF-8?q?#1230.=20[=E5=B8=B8=E4=B8=AD20180903=20T2]=20?= =?UTF-8?q?=E5=B0=8F=E5=A5=87=E7=9A=84=E6=95=B0=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://sjzezoj.com/submission/47732 --- S2OJ/1230/1230.cpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/S2OJ/1230/1230.cpp b/S2OJ/1230/1230.cpp index f81e1103..5bc95af5 100644 --- a/S2OJ/1230/1230.cpp +++ b/S2OJ/1230/1230.cpp @@ -1,16 +1,15 @@ -#include #include +#include using std::cin; using std::cout; using std::endl; -const int N = 500005; -const int P = 505; +const int N = 500005, + P = 505; int n, m, l, r, p, a[N]; long long sum[N]; -bool vis[P]; int main() { cin >> n >> m; @@ -19,22 +18,18 @@ int main() { } while (m--) { long long ans = 0x3f3f3f3f; - memset(vis, 0x00, sizeof(vis)); - vis[0] = true; cin >> l >> r >> p; if (r - l >= p) { cout << 0 << endl; continue; } + std::set s; + s.insert(0); sum[l - 1] = 0; for (int i = l; i <= r; i++) { sum[i] = (sum[i - 1] + a[i]) % p; - for (int j = sum[i]; j >= 0; j--) { - if (vis[j]) { - ans = std::min(ans, sum[i] - j); - } - } - vis[sum[i]] = true; + ans = std::min(ans, sum[i] - *(--s.upper_bound(sum[i]))); + s.insert(sum[i]); } cout << ans << endl; }