SGU 180.Inversions
没什么好说的离散化求逆序对,树状数组即可
code
#include <iostream>
#include <algorithm>
#define INF 66666
using namespace std;
int A[INF], g[INF], pos[INF], n;
long long ans;
void update (int x, int k) {
for (; x <= n; x += x & -x) A[x] += k;
}
long long getsum (int x) {
long long sum = 0;
for (; x > 0; x -= -x & x) sum += A[x];
return sum;
}
bool cmp (int a, int b) {
return g[a] < g[b];
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) cin >> g[i], pos[i] = i;
stable_sort (pos + 1, pos + 1 + n, cmp);
for (int i = 1; i <= n; i++) g[pos[i]] = i;
for (int i = n; i >= 1; i--) {
update (g[i], 1);
ans += getsum (g[i] - 1);
}
cout << ans << endl;
}

浙公网安备 33010602011771号