Submission #883676

#TimeUsernameProblemLanguageResultExecution timeMemory
883676OAleksaBigger segments (IZhO19_segments)C++14
13 / 100
4 ms15000 KiB
#include<bits/stdc++.h> using namespace std; #define f first #define s second #define int long long const int maxn = 5e5 + 69; const int inf = 1e18; int n, a[maxn], p[maxn]; vector<pair<int, int>> g[maxn]; signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int tt = 1; //cin >> tt; while (tt--) { cin >> n; for (int i = 1;i <= n;i++) cin >> a[i]; for (int i = 1;i <= n;i++) p[i] = p[i - 1] + a[i]; g[0].push_back({0, 0}); int ans; auto check = [&](int x, int i) { int l = 0, r = (int)g[x - 1].size() - 1, k = -1; while (l <= r) { int mid = (l + r) / 2; int u = g[x - 1][mid].f, w = g[x - 1][mid].s; if (p[i] - p[u] >= w) { k = p[i] - p[u]; l = mid + 1; } else r = mid - 1; } return k; }; for (int i = 1;i <= n;i++) { int l = 1, r = i, id = 0, sm = 0; while (l <= r) { int mid = (l + r) / 2; int gas = check(mid, i); if (gas != -1) { id = mid; sm = gas; l = mid + 1; } else r = mid - 1; } if (i == n) ans = id; g[id].push_back({i, sm}); } cout << ans; } return 0; }
#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...