Submission #524648

#TimeUsernameProblemLanguageResultExecution timeMemory
524648DragonO_oBigger segments (IZhO19_segments)C++17
0 / 100
1 ms332 KiB
#include <bits/stdc++.h> using namespace std; #define x first #define y second #define pb push_back #define all(a) a.begin(), a.end() #define int long long typedef long long ll; typedef long double ld; typedef unsigned long long ull; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef vector<ll> vll; typedef vector<int> vi; typedef vector<bool> vb; typedef vector<vi> vvi; typedef vector<vll> vvll; typedef vector<pii> vpii; typedef vector<pll> vpll; const int N = 5e5 + 99; int a[N], pref[N]; pii dp[N]; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; for (int i = 1; i <= n; ++i) { cin >> a[i]; pref[i] = pref[i - 1] + a[i]; } if (n <= 1000) { int ans = 1; for (int i = 1; i <= n; ++i) { int cur = i + 1, prev = pref[i], cnt = 1; while (cur <= n) { int sum = 0; for (int j = cur; j <= n; ++j) { sum += a[j]; if (sum >= prev) { prev = sum; cnt++; cur = j + 1; break; } } if (sum < prev) { break; } } ans = max(ans, cnt); } cout << ans; } else { dp[0] = {0, 0}; dp[1] = {1, a[1]}; for (int i = 2; i <= n; ++i) { int l = 1, r = i; while (l < r) { int mid = (l + r + 1) / 2; if (pref[i] - pref[mid - 1] < dp[mid - 1].y) { r = mid - 1; } else { l = mid; } } dp[i] = {dp[l - 1].x + 1, pref[i] - pref[l - 1]}; } cout << dp[n].x; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...