#include #include #ifdef DEBUG #include "cpp-dump/dump.hpp" #define dump(...) cpp_dump(__VA_ARGS__) #else #define dump(...) #endif using namespace std; using namespace atcoder; typedef long long ll; const ll INF = 2 * 1e18; ll op1 (ll a, ll b) {return max(a,b);} ll e1() {return -INF;} void solve() { ll n; cin >> n; vector A(n); for (ll i = 0; i < n; ++i) cin >> A[i]; vector t(n+2, -INF); // vector ans(n); segtree segmin(t); segtree segplus(t); segmin.set(0, A[0]*(-1)); if (n == 1) { cout << A[0]*(-1) << endl; return; } // iにマイナスがかかるときとプラスがかかるときを別に計算する for (ll i = 1; i < n; ++i) { ll t = segmin.prod(0, i); segplus.set(i, A[i]+t); t = segplus.prod(0,i); // if (t == -INF) continue; if (1 == i) { segmin.set(i, A[i]*(-1)); } else { segmin.set(i, t + A[i]*(-1)); } } ll ans = max(segmin.all_prod(), segplus.all_prod()); assert(ans != -INF); cout << ans << endl; } int main() { solve(); return 0; }