/* https://yukicoder.me/wiki/stdio#:~:text=JavaScript 上記の入力例をベース */ function Main(input) { const data = input.split("\n") const N = parseInt(data[0]); const A = data[1].split(" ").map( x => parseInt(x) ); const B = data[2].split(" ").map( x => parseInt(x) ); const btree = Node.makeTree([...A,...B]); A.sort( (a, b) => a - b ); let ans = 0; for (let i = 0; i < N; i++) { btree.add(B[i]); ans += btree.lowerCount(A[i]); } console.log(ans); } class Node { constructor(key) { this.key = key; this.cnt = 0; this.lc = 0; this.lower = null; this.upper = null; } add(key) { if (this.key === key) { this.cnt++; } else if (this.key < key) { this.upper.add(key); } else if (this.key > key) { this.lc++; this.lower.add(key); } } lowerCount(key) { if (this.key === key) { return this.lc; } else if (this.key < key) { return this.lc+this.cnt+(this.upper !== null ? this.upper.lowerCount(key) : 0); } else if (this.key > key) { return this.lower !== null ? this.lower.lowerCount(key) : 0; } } static makeTree(keys) { keys = [...new Set(keys).keys()]; keys.sort( (a, b) => a - b ); return Node.build(keys, 0, keys.length-1); } static build(keys, i, j) { if (i > j) { return null; } if (i === j) { return new Node(keys[i]); } const p = (j + i) >> 1; const n = new Node(keys[p]); n.lower = Node.build(keys, i, p-1); n.upper = Node.build(keys, p+1, j); return n; } } // Don't edit this line! Main(require("fs").readFileSync("/dev/stdin", "utf8"));