#include #define rep(i, a, b) for(int i = (a); i <= (b); i ++) using std::cin, std::cout, std::cerr; using ll = long long; int LowBit(int x) { return x & (-x); } struct BIT { int n; std::vector a; BIT(int n) { Init(n); } void Init(int n) { this->n = n; a.assign(n + 1, 0); } void Update(int p, int x) { for(int i = p + 1; i <= n + 1; i += LowBit(i)) a[i - 1] += x; } int Query(int p) { int r = 0; for(int i = p + 1; i; i -= LowBit(i)) r += a[i - 1]; return r; } }; int main() { std::ios::sync_with_stdio(false); int n; cin >> n; std::vector> a(n); rep(i, 0, n - 1) { int l, r; cin >> l >> r; a[i] = {l, r}; } ll ans = 0; int M = 1e6 + 1; BIT bit(M); std::function solve = [&](int l, int r) { if(l + 1 == r) return; int m = (l + r) / 2; solve(l, m); solve(m, r); std::vector> b; rep(i, l, r - 1) b.push_back({a[i].first, a[i].second, i >= m}); std::ranges::sort(b); for(auto [l, r, t] : b) { if(t == 0) bit.Update(r, 1); else ans += bit.Query(M) - bit.Query(r); } for(auto [l, r, t] : b) { if(t == 0) bit.Update(r, -1); } }; solve(0, n); cout << ans << '\n'; }