#include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int Maxn = 200005; const int Maxm = 1048576; int n; int a[Maxn]; int was[Maxn], nxt[Maxn]; int col[Maxn]; vector seq[Maxn]; vector st[Maxm]; ll res; void Create(int v, int l, int r) { if (l == r) st[v].push_back(nxt[l]); else { int m = l + r >> 1; Create(2 * v, l, m); Create(2 * v + 1, m + 1, r); int lc = 2 * v, rc = 2 * v + 1; int i = 0, j = 0; while (i < st[lc].size() || j < st[rc].size()) if (i < st[lc].size() && (j == st[rc].size() || st[lc][i] <= st[rc][j])) st[v].push_back(st[lc][i++]); else st[v].push_back(st[rc][j++]); } } int Get(int v, int l, int r, int a, int b, int nd) { if (l == a && r == b) return lower_bound(st[v].begin(), st[v].end(), nd) - st[v].begin(); else { int m = l + r >> 1; int res = 0; if (a <= m) res += Get(2 * v, l, m, a, min(m, b), nd); if (m + 1 <= b) res += Get(2 * v + 1, m + 1, r, max(m + 1, a), b, nd); return res; } } int main() { scanf("%d", &n); for (int i = 0; i < 2 * n; i++) { scanf("%d", &a[i]); a[i + 2 * n] = a[i]; } fill(was, was + Maxn, 4 * n); for (int i = 4 * n - 1; i >= 0; i--) { nxt[i] = was[a[i]]; was[a[i]] = i; } Create(1, 0, 4 * n - 1); for (int i = 0; i < 4 * n; i++) { seq[a[i]].push_back(i); if (seq[a[i]].size() == 2 || seq[a[i]].size() == 3) { int prv = seq[a[i]][seq[a[i]].size() - 2]; if (prv + 1 < i) col[a[i]] += Get(1, 0, 4 * n - 1, prv + 1, i - 1, i); } } for (int i = 1; i <= n; i++) res += n - 1 - col[i]; res /= 2; cout << res << endl; return 0; }