Submission #862336

#TimeUsernameProblemLanguageResultExecution timeMemory
862336Halym2007Bigger segments (IZhO19_segments)C++11
100 / 100
183 ms29632 KiB
#include<bits/stdc++.h> #define ll long long #define ff first #define ss second #define sz size() #define pb push_back using namespace std; const int N = 5e5 + 5; ll dp[N], p[N], a[N], val[N]; ll ind; int main () { // freopen("testcase.txt", "r", stdin); ll n; cin >> n; for (int i = 1; i <= n; ++i) { cin >> a[i]; p[i] = a[i] + p[i - 1]; } vector <pair <int, ll>> v; for (int i = 1; i <= n; ++i) { if (!v.empty()) { int jog = -1; int l = 0, r = (int)v.sz - 1; while (l <= r) { int md = (l + r) / 2; if (v[md].ss > p[i]) { r = md - 1; } else { jog = v[md].ff; l = md + 1; } } if (jog == -1) { val[i] = p[i]; dp[i] = 1; } else { val[i] = p[i] - p[jog]; dp[i] = 1 + dp[jog]; } } else { dp[i] = dp[i - 1] + 1; val[i] = a[i]; } while (!v.empty() and v.back().ss >= val[i] + p[i]) v.pop_back(); v.pb ({i, val[i] + p[i]}); } cout << dp[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...