#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
****************************************************************/