#include <iostream>
#include <cstring>
using namespace std;
const int N = 2e5 + 10;
typedef long long LL;
int n, a[N], tr[N];
LL highle[N], lowle[N];
int lowbit(int x)
{
return x & -x;
}
void add(int u, int c)
{
for (int i = u; i <= n; i += lowbit(i)) tr[i] += c;
}
int sum(int u)
{
int ans = 0;
for (int i = u; i > 0; i -= lowbit(i)) ans += tr[i];
return ans;
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i ++ )
{
cin >> a[i];
highle[i] = sum(n) - sum(a[i]);
lowle[i] = sum(a[i] - 1);
add(a[i], 1);
}
memset(tr, 0, sizeof tr);
LL cntA = 0, cntV = 0;
for (int i = n; i >= 1; i -- )
{
cntA += lowle[i] * sum(a[i] - 1);
cntV += highle[i] * (sum(n) - sum(a[i]));
add(a[i], 1);
}
cout << cntV << ' ' << cntA;
return 0;
}
AcWing 241. 楼兰图腾 / 树状数组 + 在线隔离数据 + 变为 1 统计和
发布时间 2023-04-26 16:32:04作者: 妃即