Link to this code:
https://cses.fi/paste/7895727ce6f95b647c0701/
#include <bits/stdc++.h>
using namespace std;
#define fst first
#define snd second
typedef long long ll;
typedef pair<int, int> ii;
const ll LINF = (ll)1e18;
const int INF = (int)1e9;
const int N = (int)2e5 + 5;
int n;
int x[N];
ll sum[N];
// có mảng sum[N] là tổng tiền tố của mảng x[N]
// công thức lấy tổng đoạn [l, r] của x: sum[r] - sum[l - 1]
// sum[r] - sum[l] (lấy tổng của đoạn [l + 1, r])
// l + 1 <= r
// l <= r - 1
// Viết lại bài toán là tìm hai chỉ số (l, r) (l < r) sum[r] - sum[l] lớn nhất
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> x[i];
sum[i] = sum[i - 1] + x[i];
}
// sum[r] - sum[l]
// mình for r, đã biết được sum[r], bài toán còn lại là tìm l sao cho sum[r] - sum[l] lớn nhất
// => sum[l] càng nhỏ càng tốt
ll ans = -LINF;
ll min_sum_l = 0;
for (int r = 1; r <= n; r++) {
ll max_sum = sum[r] - min_sum_l;
ans = max(ans, max_sum);
min_sum_l = min(min_sum_l, sum[r]);
}
cout << ans << '\n';
}