Submission #151372

#TimeUsernameProblemLanguageResultExecution timeMemory
151372theboatmanBigger segments (IZhO19_segments)C++17
0 / 100
2 ms376 KiB
#include <bits/stdc++.h> #define y1 theboatman #define make_struct(args...) {args} using namespace std; typedef long long ll; const long long INF = 1e18 + 10; const int inf = 1e9 + 10; const int N = 1e6 + 10; int dp[3000][3000]; vector <ll> pref; ll get(int l, int r) { ll res = pref[r]; return (l ? res - pref[l - 1] : res); } int main() { cin.tie(0); ios::sync_with_stdio(0); int n; cin >> n; vector <int> a(n); for(int i = 0; i < n; i++) { cin >> a[i]; } for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { dp[i][j] = -inf; } } for(int i = 0; i < n; i++) { dp[0][i] = 1; } pref.resize(n); for(int i = 0; i < n; i++) { pref[i] = (i ? pref[i - 1] + a[i] : a[i]); } vector <int> line(n + 1, -inf); for(int i = 0; i < n; i++) { for(int j = i; j < n; j++) { int l = j + 1, r = n; while(l < r) { int c = (l + r) / 2; if (get(i, j) > get(j + 1, c)) { l = c + 1; } else { r = c; } } line[l] = max(line[l], dp[i][j] + 1); dp[i][j] = max(dp[i][j], line[i]); } } int ans = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { ans = max(ans, dp[i][j]); } } cout << ans << "\n"; 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...