#include<bits/stdc++.h>
using namespace std;
const int NR = 2e5 + 5;
int n, x, tot, dfn, rt[NR + 5];
long long res1, res2, ans;
struct Node {
int l, r, cnt;
} tree[NR * 15 + 5];
void pushup(int p) {
tree[p].cnt = tree[tree[p].l].cnt + tree[tree[p].r].cnt;
}
void modify(int &p, int l, int r, int k, int v) {
if(p == 0) p = ++tot;
if(l == r) {
tree[p].cnt++;
return;
}
int mid = (l + r) / 2;
if(k <= mid) modify(tree[p].l, l, mid, k, v);
else modify(tree[p].r, mid + 1, r, k, v);
pushup(p);
}
int merge(int a, int b, int l, int r) {
if(a == 0) return b;
if(b == 0) return a;
if(l == r) {
tree[a].cnt += tree[b].cnt;
return a;
}
res1 += tree[tree[a].r].cnt * tree[tree[b].l].cnt;
res2 += tree[tree[a].l].cnt * tree[tree[b].r].cnt;
int mid = (l + r) / 2;
tree[a].l = merge(tree[a].l, tree[b].l, l, mid);
tree[a].r = merge(tree[a].r, tree[b].r, mid + 1, r);
pushup(a);
return a;
}
int solve() {
scanf("%d", &x);
if(x == 0) {
int ls = solve();
int rs = solve();
res1 = res2 = 0;
rt[ls] = merge(rt[ls], rt[rs], 1, n);
ans += min(res1, res2);
return ls;
}
modify(rt[x], 1, n, x, 1);
return x;
}
int main() {
scanf("%d", &n);
solve();
printf("%lld\n", ans);
return 0;
}
显示 Segmentation fault with invalid memory reference. 不知道为什么