Submission #1309283

#TimeUsernameProblemLanguageResultExecution timeMemory
1309283elitewantsyouBigger segments (IZhO19_segments)C++20
100 / 100
76 ms35560 KiB
#pragma GCC optimize("Ofast") #include <bits/stdc++.h> using namespace std; const int N = 500500; int n; int a[N]; long long s[N]; int d[N]; vector<pair<long long, int>> v[N]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; s[i] = s[i - 1] + a[i]; } v[0].push_back({0, 0}); for (int i = 1; i <= n; i++) { d[i] = d[i - 1]; if (s[i] >= v[d[i]][0].first) { d[i] = d[i - 1] + 1; } int j = lower_bound(v[d[i] - 1].begin(), v[d[i] - 1].end(), make_pair(s[i] + 1, 0)) - v[d[i] - 1].begin() - 1; j = v[d[i] - 1][j].second; while (!v[d[i]].empty() && 2 * s[i] - s[j] < v[d[i]].back().first) { v[d[i]].pop_back(); } assert (v[d[i]].empty() || 2 * s[i] - s[j] >= v[d[i]].back().first); v[d[i]].push_back({2 * s[i] - s[j], i}); } cout << d[n] << "\n"; }
#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...