{"ScriptPreparationCode":"function newPath() {\r\n return {\r\n id:Math.random() * Number.MAX_SAFE_INTEGER\r\n }\r\n}\r\n\r\nArray.lowerBound = function(array, element, comparator = (a,b) =\u003E a.id - b.id) {\r\n\tlet result = 0;\r\n\tlet count = array.length; // Not n - 1\r\n\tlet match = false;\r\n\twhile (result \u003C count) {\r\n\t\tconst mid = Math.floor((result \u002B count) / 2);\r\n\t\tconst delta = comparator(element, array[mid]);\r\n\t\tif (delta \u003C= 0) {\r\n\t\t\tcount = mid;\r\n\t\t\tif (!delta) {\r\n\t\t\t\tmatch = true;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tresult = mid \u002B 1;\r\n\t\t}\r\n\t}\r\n\tif (match) {\r\n\t\t// search on the right if there is an element equals to elements\r\n\t\tmatch = result;\r\n\t\tdo {\r\n\t\t\tif (element === array[match])\r\n\t\t\t\treturn match;\r\n\t\t} while (\u002B\u002Bmatch\u003Carray.length \u0026\u0026 !comparator(element, array[match]));\r\n\t}\r\n\treturn result;\r\n};\r\n","TestCases":[{"Name":"Array","Code":"let paths = new Array(); \r\nfor(let i = 0; i\u003C10000; \u002B\u002Bi) {\r\n \tconst path = newPath();\r\n\tlet i = Array.lowerBound(paths, path);\r\n if(i\u003E=paths.length || paths[i].id !== path.id) {\r\n\t\tpaths.splice(i, 0, path);\r\n }\r\n}","IsDeferred":false},{"Name":"Map","Code":"let paths = new Map(); \r\nfor(let i = 0; i\u003C10000; \u002B\u002Bi) {\r\n \tconst path = newPath();\r\n \tlet p = paths.get(path.id);\r\n \tif(!p) {\r\n paths.set(path.id, p);\r\n \t}\r\n}","IsDeferred":false}]}