Submission #1141233

#TimeUsernameProblemLanguageResultExecution timeMemory
1141233NurislamBigger segments (IZhO19_segments)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h> using namespace std; #define int long long signed main(){ int n; cin >> n; vector<int> a(n); for(int &i : a) cin >> i; vector<int> pr{0}; for(int i : a) pr.push_back(pr.back() + i); vector<int> dp (n + 1, 0), opt(n + 1, 0); for(int i = 1; i <= n; i++) { if(dp[i] < dp[i-1]) dp[i] = dp[i-1], opt[i] = opt[i-1]; if(dp[i] == dp[i-1]) opt[i] = max(opt[i-1], opt[i]); int df = pr[i] * 2 - pr[opt[i]]; int l = i + 1, r = n, ans = i; while(l <= r){ int m = (l + r) >> 1; if(pr[m] < df) l = m + 1; else { ans = m; r = m - 1; } } if ( dp[ans] < dp[i] + 1) dp[ans] = dp[i] + 1, opt[ans] = i; if ( dp[ans] == dp[i] + 1) opt[ans] = max(opt[ans], i); } cout << dp[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...