#include <vector>
#include <algorithm>
using namespace std;
constexpr int mask(int x) { return x + (x >> 10); }
constexpr int kN = 1e7;
int c[kN];
vector<int> p[kN];
int f[mask(kN) + 1];
void count_2d(int n, const unsigned *x, const unsigned *y, unsigned *out) {
for (int i = 0; i < n; ++i) {
++c[x[i]];
}
for (int i = 0; i < n; ++i) {
p[i].reserve(c[i]);
}
for (int i = 0; i < n; ++i) {
p[x[i]].push_back(i);
}
for (int i = 0; i < n; ++i) {
for (int j : p[i]) {
unsigned s = 0;
for (int x = y[j]; x; x &= x - 1) {
s += f[mask(x)];
}
out[j] = s;
}
for (int j : p[i]) {
for (int x = y[j] + 1; x <= n; x += x & -x) {
++f[mask(x)];
}
}
}
}