/* -*- coding: utf-8 -*- * * 1150.cc: No.1150 シュークリームゲーム(Easy) - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 100000; const int MAX_N2 = MAX_N * 2; const long long LINF = 1LL << 62; /* typedef */ typedef long long ll; /* global variables */ int as[MAX_N2]; ll ass[MAX_N2 + 1]; /* subroutines */ /* main */ int main() { int n, s, t; scanf("%d%d%d", &n, &s, &t); s--, t--; int n2 = n * 2; for (int i = 0; i < n; i++) scanf("%d", as + i), as[i + n] = as[i]; for (int i = 0; i < n2; i++) ass[i + 1] = ass[i] + as[i]; int s0, t0, t1, s1; if (s < t) s0 = s, t0 = t1 = t, s1 = s + n; else s0 = s, t0 = t + n, t1 = t, s1 = s; ll minp0 = -LINF, minp1 = -LINF; if (s0 + 1 < t0) { int l = (t0 + 1 - s0) / 2; int w = t0 + 1 - l; ll q = (ass[w] - ass[s0]) - (ass[t0 + 1] - ass[w]); ll r = (ass[t0] - ass[s0]) - (ass[s1] - ass[t1]); minp0 = min(q, r); } if (t1 + 1 < s1) { int l = (s1 + 1 - t1) / 2; int w = t1 + l; ll q = (ass[s1 + 1] - ass[w]) - (ass[w] - ass[t1]); ll r = (ass[s1 + 1] - ass[t1 + 1]) - (ass[t0 + 1] - ass[s0 + 1]); minp1 = min(q, r); } printf("%lld\n", max(minp0, minp1)); return 0; }