#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 = 3 * 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 ttt(n+2, -INF), tt(n+2, -INF); // vector ans(n); segtree segmin(ttt); segtree segplus(tt); segmin.set(0, -A[0]); // iにマイナスがかかるときとプラスがかかるときを別に計算する for (ll i = 1; i < n; ++i) { ll t = segmin.prod(0, i+1); segplus.set(i, t+A[i]); ll tt = segplus.prod(0,i+1); if (1 == i) { segmin.set(i, -A[i]); } else { segmin.set(i, tt - A[i]); } } ll ans = max((ll)segmin.all_prod(), (ll)segplus.all_prod()); assert(ans != -INF); cout << ans << endl; } int main() { solve(); return 0; }