#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

// 树状数组(Binary Indexed Tree)实现
class BIT {
private:
    vector<int> tree;
    int n;

public:
    BIT(int size) {
        n = size;
        tree.resize(n + 1, 0);
    }

    void update(int idx, int delta) {
        while (idx <= n) {
            tree[idx] += delta;
            idx += idx & -idx;
        }
    }

    int query(int idx) {
        int res = 0;
        while (idx > 0) {
            res += tree[idx];
            idx -= idx & -idx;
        }
        return res;
    }
};

int main() {
    int n;
    cin >> n;
    vector<int> arr(n);
    for (int i = 0; i < n; ++i) {
        cin >> arr[i];
    }

    // 复制数组用于离散化
    vector<int> sorted = arr;
    sort(sorted.begin(), sorted.end());
    // 去重
    sorted.erase(unique(sorted.begin(), sorted.end()), sorted.end());

    BIT bit(sorted.size());
    long long total = 0;

    // 从后往前处理数组
    for (int i = n - 1; i >= 0; --i) {
        // 找到当前元素在离散化后的数组中的位置
        int pos = lower_bound(sorted.begin(), sorted.end(), arr[i]) - sorted.begin() + 1;
        // 查询比当前元素小的元素数量
        total += bit.query(pos - 1);
        // 更新树状数组
        bit.update(pos, 1);
    }

    cout << total << endl;

    return 0;
}
/**************************************************************
	Problem: 1215
	User: mc002
	Language: C++
	Result: Accepted
	Time:8 ms
	Memory:2076 kb
****************************************************************/