#include using namespace std; #include //using namespace atcoder; using ll = long long; using ull = unsigned long long; using i128 = __int128_t; using u128 = unsigned __int128_t; using mint = atcoder::static_modint<998244353>; const int mod = 998244353; #include mt19937_64 rng(std::chrono::steady_clock::now().time_since_epoch().count()); int dx[8] = {-1, 1, 0, 0, -1, -1, 1, 1}; int dy[8] = {0, 0, -1, 1, -1, 1, -1, 1}; template bool chmin(T& a, const T& b){ if (b < a){ a = b; return true; } else { return false; } } template bool chmax(T& a, const T& b){ if (a < b){ a = b; return true; } else { return false; } } namespace addx{ template class FenwickTree{ private: int n; vector t; public: FenwickTree(int size) : n(size), t(size + 1, T(0)) {} //O(n)構築 FenwickTree(const vector& x){ n = (int)x.size(); t.assign(n + 1, T(0)); for (int i = 1; i <= n; i++){ t[i] += x[i - 1]; int k = i + (i & -i); if (k <= n){ t[k] += t[i]; } } } void add(int idx, T val){ for (int i = idx + 1; i <= n; i += i & -i){ t[i] += val; } } T sum(int idx){ T now = 0; for (int i = idx; i > 0; i -= i & -i){ now += t[i]; } return now; } T sum(int l, int r){ return sum(r) - sum(l); } //初めてsum >= kになるindexを返す int max_right(T k){ if (k <= 0){ return 0; } int idx = 0; int bt = 1; while((bt << 1) <= n){ bt <<= 1; } T sm = 0; for (int i = bt; i > 0; i >>= 1){ int nxt = idx + i; if (nxt <= n && sm + t[nxt] < k){ idx = nxt; sm += t[nxt]; } } return idx; } }; } void solve(){ int n; cin >> n; vector a(n); for (int i = 0; i < n; i++){ cin >> a[i]; } vector b = a; sort(b.begin(), b.end()); b.erase(unique(b.begin(), b.end()), b.end()); unordered_map mp; for (int i = 0; i < (int)b.size(); i++){ mp[b[i]] = i; } addx::FenwickTree fw1((int)b.size()), fw2((int)b.size()), fw3((int)b.size()), fw4((int)b.size()); for (int i = 0; i < n; i++){ fw1.add(mp[a[i]], a[i]); fw2.add(mp[a[i]], 1); } ll ans = 0; for (int i = 0; i < n; i++){ int idx = mp[a[i]]; fw1.add(idx, -a[i]); fw2.add(idx, -1); ll l = fw2.sum(0, idx), r = fw4.sum(idx + 1, (int)b.size()); if (l != 0 && r != 0){ ans += l * r * a[i] + fw1.sum(0, idx) * r + fw3.sum(idx + 1, (int)b.size()) * l; } fw3.add(idx, a[i]); fw4.add(idx, 1); } cout << ans << '\n'; }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; while(t--){ cout << fixed << setprecision(15); solve(); } }