#define _CRT_SECURE_NO_WARNINGS #define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING #include using namespace std; const int N = 1000500; namespace Solution { const int N = 100005; struct Node { int x, cnt; } a[N], b[N]; void merge(int st, int ed) { int md = (st + ed) >> 1; int i = st, j = md + 1, cnt = st; while (i <= md && j <= ed) if (a[i].x > a[j].x) { a[j].cnt += md + 1 - i; b[cnt++] = a[j++]; } else { a[i].cnt += j - 1 - md; b[cnt++] = a[i++]; } while (j <= ed)b[cnt++] = a[j++]; while (i <= md) { a[i].cnt += ed - md; b[cnt++] = a[i++]; } for (i = st; i <= ed; i++)a[i] = b[i]; } void merge_sort(int st, int ed) { if (st == ed) return; int md = (st + ed) >> 1; merge_sort(st, md); merge_sort(md + 1, ed); merge(st, ed); } void solve() { memset(a, 0, sizeof(a)); int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &a[i].x); long long ans = 0; merge_sort(0, n - 1); for (int i = 0; i < n; i++) ans += (a[i].cnt + 1) * a[i].cnt / 2; printf("%lld", ans); } } int main() { Solution::solve(); return 0; }