#include using namespace std; using ll = long long; templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b struct BinaryIndexedTree { vector< T > data; BinaryIndexedTree(int sz) { data.assign(++sz, 0); } T sum(int k) { T ret = 0; for(++k; k > 0; k -= k & -k) ret += data[k]; return (ret); } void add(int k, T x) { for(++k; k < data.size(); k += k & -k) data[k] += x; } }; auto bit = BinaryIndexedTree(200010); ll cnt = 0; vector G[200010]; void dfs(ll i){ // iより値の小さい先祖 cnt += bit.sum(i-1); // 自身を先祖に足す bit.add(i, 1); // 子どもたち for(ll to : G[i]){ dfs(to); } // 自身を先祖一覧から取り除く bit.add(i, -1); } int main(){ cin.tie(0); ios::sync_with_stdio(false); // input ll N; cin >> N; FOR(i, 1, N){ ll parent; cin >> parent; G[parent].push_back(i); } dfs(0); p(cnt); return 0; }