#include #include #include #define lim 320 #define f first #define s second #define mp make_pair using namespace std; int v[100010], ap[100010], cit[100010]; vector < pair > bloc[350]; bool cmp (pair a, pair b) { return (a.s < b.s); } int main () { // freopen ("cc.in", "r", stdin); int n; scanf ("%d", &n); for (int i = 1; i <= 2 * n; ++i) { scanf ("%d", &v[i]); ap[v[i]] = i; } int nrb = 0; for (int i = 1; i <= 2 * n; ++i) { if (ap[v[i]] == i) continue; nrb = max (nrb, i/lim); bloc[i/lim].push_back (mp (i, ap[v[i]])); } int ri = lim - 1; long long nr = 0LL; for (int i = 0; i <= nrb; ++i, ri += lim) { sort (bloc[i].begin (), bloc[i].end (), cmp); for (int i = 1; i <= 50005; ++i) cit[i] = 0; int lst = ri + 1; int ah = 0; for (auto &it : bloc[i]) { for (int j = lst; j < it.s; ++j) { ++cit[v[j]]; if (cit[v[j]] == 1) ++ah; else --ah; } for (int j = it.f + 1; j <= min (it.s - 1, ri); ++j) { ++cit[v[j]]; if (cit[v[j]] == 1) ++ah; else --ah; } nr += 1LL * ah; lst = max (lst, it.s); for (int j = it.f + 1; j <= min (it.s - 1, ri); ++j) { --cit[v[j]]; if (cit[v[j]] == 1) ++ah; else --ah; } } } printf ("%lld\n", nr / 2LL); return 0; }