#include #include #include #include #include #include using namespace std; int v[120000]; pair h[120000]; int viz[120000]; int rez[120000]; struct ev { int x, y,v; int id; int op; ev(int x, int y,int v, int op, int id) { this->x = x; this->y = y; this->op = op; this->v = v; this->id = id; } }; int aib[120000]; int query(int x) { int s = 0; for (; x; x -= x&(-x)) s += aib[x]; return s; } void update(int x) { for (; x <= 50500; x += x&(-x)) aib[x] += 1; } bool compare(const ev &e1, const ev &e2) { if (e1.x != e2.x) return e1.x < e2.x; else return e1.op < e2.op; } vector vec; int main() { int N; cin >> N; N *= 2; for (int i = 1; i <= N; ++i) { cin >> v[i]; } for (int i = 1; i <= N; ++i) { if (!viz[v[i]]) viz[v[i]] = i; else { h[viz[v[i]]] = make_pair(viz[v[i]], i); h[i] = make_pair(viz[v[i]], i); } } for (int i = 1; i <= N; ++i) { vec.push_back(ev(i, 0,0, 2, i)); vec.push_back(ev(i, 1,0, 2, i)); if (viz[v[i]]) { vec.push_back(ev(h[i].first, h[i].first,h[i].second, 1, i)); vec.push_back(ev(h[i].second, h[i].first,h[i].second, 3, i)); viz[v[i]] = 0; } } sort(vec.begin(), vec.end(), compare); int sol = 0; for (int i = 0; i < vec.size(); ++i) { ev even = vec[i]; if(even.op==1) { rez[even.id] = query(even.v) - query(even.y-1); } else if (even.op == 2) { if(even.y==0) update(h[even.x].first); else update(h[even.x].second); } else { rez[even.id] = query(even.v) - query(even.y-1) - rez[even.id]; sol += (even.v - even.y + 1) - (rez[even.id] - (even.v - even.y + 1)); } } cout << sol / 2; return 0; }