#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; class range {private: struct I{int x;int operator*(){return x;}bool operator!=(I& lhs){return x ostream& operator<<(ostream& os, const pair& p){ return os << "{" << p.first << ", " << p.second << "}"; } template ostream& operator<<(ostream& os, const vector& obj) { os << "{"; for (const auto& e : obj) os << e << ", "; return os << "}"; } template ostream& operator<<(ostream& os, const set& obj) { os << "set{"; for (const auto& e : obj) os << e << ", "; return os << "}"; } template ostream& operator<<(ostream& os, const map& obj) { os << "map{"; for (const auto& e : obj) os << e << ", "; return os << "}"; } #ifdef ONLINE_JUDGE #define dump(expr) ; #else #define dump(expr) { cerr << "\033[33m#L" << __LINE__ << ": " << expr << "\033[39m" << endl; } #endif template struct PrefixSum { vector sums; PrefixSum(vector vs) { int n = (int)vs.size(); sums.resize(n + 1, (T)0); for (int i : range(n)) sums[i + 1] = sums[i] + vs[i]; } T sum(int i, int j) { // vs[i] + ... + vs[j] if (i > j) return (T)0; return sums[j + 1] - sums[i]; } }; ll solve() { ll n; cin >> n; vector vs(n); for (int i : range(n)) cin >> vs[i]; sort(vs.begin(), vs.end()); if (n <= 2) return 0; auto ps = PrefixSum(vs); ll best = 0; for (ll m = 1; m < n - 1; m++) { ll lo = 1, hi = min(m, n - m - 1) + 1; while (hi - lo > 1) { int r = (hi + lo) / 2; if (vs[m - r] + vs[n - r] - 2 * vs[m] > 0) lo = r; else hi = r; } ll r = lo; ll cand = ps.sum(m - r, m - 1) + ps.sum(n - r, n - 1) - 2 * r * vs[m]; dump(m << " => " << cand << "(" << r << " " << ")"); best = max(best, cand); } return best; } int main() { cout << fixed << setprecision(12); cout << solve() << endl; }