1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-10 18:48:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode/originData/sequentially-ordinal-rank-tracker.json
2022-05-02 23:44:12 +08:00

183 lines
27 KiB
JSON

{
"data": {
"question": {
"questionId": "2207",
"questionFrontendId": "2102",
"boundTopicId": null,
"title": "Sequentially Ordinal Rank Tracker",
"titleSlug": "sequentially-ordinal-rank-tracker",
"content": "<p>A scenic location is represented by its <code>name</code> and attractiveness <code>score</code>, where <code>name</code> is a <strong>unique</strong> string among all locations and <code>score</code> is an integer. Locations can be ranked from the best to the worst. The <strong>higher</strong> the score, the better the location. If the scores of two locations are equal, then the location with the <strong>lexicographically smaller</strong> name is better.</p>\n\n<p>You are building a system that tracks the ranking of locations with the system initially starting with no locations. It supports:</p>\n\n<ul>\n\t<li><strong>Adding</strong> scenic locations, <strong>one at a time</strong>.</li>\n\t<li><strong>Querying</strong> the <code>i<sup>th</sup></code> <strong>best</strong> location of <strong>all locations already added</strong>, where <code>i</code> is the number of times the system has been queried (including the current query).\n\t<ul>\n\t\t<li>For example, when the system is queried for the <code>4<sup>th</sup></code> time, it returns the <code>4<sup>th</sup></code> best location of all locations already added.</li>\n\t</ul>\n\t</li>\n</ul>\n\n<p>Note that the test data are generated so that <strong>at any time</strong>, the number of queries <strong>does not exceed</strong> the number of locations added to the system.</p>\n\n<p>Implement the <code>SORTracker</code> class:</p>\n\n<ul>\n\t<li><code>SORTracker()</code> Initializes the tracker system.</li>\n\t<li><code>void add(string name, int score)</code> Adds a scenic location with <code>name</code> and <code>score</code> to the system.</li>\n\t<li><code>string get()</code> Queries and returns the <code>i<sup>th</sup></code> best location, where <code>i</code> is the number of times this method has been invoked (including this invocation).</li>\n</ul>\n\n<p>&nbsp;</p>\n<p><strong>Example 1:</strong></p>\n\n<pre>\n<strong>Input</strong>\n[&quot;SORTracker&quot;, &quot;add&quot;, &quot;add&quot;, &quot;get&quot;, &quot;add&quot;, &quot;get&quot;, &quot;add&quot;, &quot;get&quot;, &quot;add&quot;, &quot;get&quot;, &quot;add&quot;, &quot;get&quot;, &quot;get&quot;]\n[[], [&quot;bradford&quot;, 2], [&quot;branford&quot;, 3], [], [&quot;alps&quot;, 2], [], [&quot;orland&quot;, 2], [], [&quot;orlando&quot;, 3], [], [&quot;alpine&quot;, 2], [], []]\n<strong>Output</strong>\n[null, null, null, &quot;branford&quot;, null, &quot;alps&quot;, null, &quot;bradford&quot;, null, &quot;bradford&quot;, null, &quot;bradford&quot;, &quot;orland&quot;]\n\n<strong>Explanation</strong>\nSORTracker tracker = new SORTracker(); // Initialize the tracker system.\ntracker.add(&quot;bradford&quot;, 2); // Add location with name=&quot;bradford&quot; and score=2 to the system.\ntracker.add(&quot;branford&quot;, 3); // Add location with name=&quot;branford&quot; and score=3 to the system.\ntracker.get(); // The sorted locations, from best to worst, are: branford, bradford.\n // Note that branford precedes bradford due to its <strong>higher score</strong> (3 &gt; 2).\n // This is the 1<sup>st</sup> time get() is called, so return the best location: &quot;branford&quot;.\ntracker.add(&quot;alps&quot;, 2); // Add location with name=&quot;alps&quot; and score=2 to the system.\ntracker.get(); // Sorted locations: branford, alps, bradford.\n // Note that alps precedes bradford even though they have the same score (2).\n // This is because &quot;alps&quot; is <strong>lexicographically smaller</strong> than &quot;bradford&quot;.\n // Return the 2<sup>nd</sup> best location &quot;alps&quot;, as it is the 2<sup>nd</sup> time get() is called.\ntracker.add(&quot;orland&quot;, 2); // Add location with name=&quot;orland&quot; and score=2 to the system.\ntracker.get(); // Sorted locations: branford, alps, bradford, orland.\n // Return &quot;bradford&quot;, as it is the 3<sup>rd</sup> time get() is called.\ntracker.add(&quot;orlando&quot;, 3); // Add location with name=&quot;orlando&quot; and score=3 to the system.\ntracker.get(); // Sorted locations: branford, orlando, alps, bradford, orland.\n // Return &quot;bradford&quot;.\ntracker.add(&quot;alpine&quot;, 2); // Add location with name=&quot;alpine&quot; and score=2 to the system.\ntracker.get(); // Sorted locations: branford, orlando, alpine, alps, bradford, orland.\n // Return &quot;bradford&quot;.\ntracker.get(); // Sorted locations: branford, orlando, alpine, alps, bradford, orland.\n // Return &quot;orland&quot;.\n</pre>\n\n<p>&nbsp;</p>\n<p><strong>Constraints:</strong></p>\n\n<ul>\n\t<li><code>name</code> consists of lowercase English letters, and is unique among all locations.</li>\n\t<li><code>1 &lt;= name.length &lt;= 10</code></li>\n\t<li><code>1 &lt;= score &lt;= 10<sup>5</sup></code></li>\n\t<li>At any time, the number of calls to <code>get</code> does not exceed the number of calls to <code>add</code>.</li>\n\t<li>At most <code>4 * 10<sup>4</sup></code> calls <strong>in total</strong> will be made to <code>add</code> and <code>get</code>.</li>\n</ul>\n",
"translatedTitle": null,
"translatedContent": null,
"isPaidOnly": false,
"difficulty": "Hard",
"likes": 131,
"dislikes": 26,
"isLiked": null,
"similarQuestions": "[{\"title\": \"Find Median from Data Stream\", \"titleSlug\": \"find-median-from-data-stream\", \"difficulty\": \"Hard\", \"translatedTitle\": null}, {\"title\": \"Kth Largest Element in a Stream\", \"titleSlug\": \"kth-largest-element-in-a-stream\", \"difficulty\": \"Easy\", \"translatedTitle\": null}, {\"title\": \"Finding MK Average\", \"titleSlug\": \"finding-mk-average\", \"difficulty\": \"Hard\", \"translatedTitle\": null}]",
"exampleTestcases": "[\"SORTracker\",\"add\",\"add\",\"get\",\"add\",\"get\",\"add\",\"get\",\"add\",\"get\",\"add\",\"get\",\"get\"]\n[[],[\"bradford\",2],[\"branford\",3],[],[\"alps\",2],[],[\"orland\",2],[],[\"orlando\",3],[],[\"alpine\",2],[],[]]",
"categoryTitle": "Algorithms",
"contributors": [],
"topicTags": [
{
"name": "Design",
"slug": "design",
"translatedName": null,
"__typename": "TopicTagNode"
},
{
"name": "Heap (Priority Queue)",
"slug": "heap-priority-queue",
"translatedName": null,
"__typename": "TopicTagNode"
},
{
"name": "Data Stream",
"slug": "data-stream",
"translatedName": null,
"__typename": "TopicTagNode"
},
{
"name": "Ordered Set",
"slug": "ordered-set",
"translatedName": null,
"__typename": "TopicTagNode"
}
],
"companyTagStats": null,
"codeSnippets": [
{
"lang": "C++",
"langSlug": "cpp",
"code": "class SORTracker {\npublic:\n SORTracker() {\n \n }\n \n void add(string name, int score) {\n \n }\n \n string get() {\n \n }\n};\n\n/**\n * Your SORTracker object will be instantiated and called as such:\n * SORTracker* obj = new SORTracker();\n * obj->add(name,score);\n * string param_2 = obj->get();\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Java",
"langSlug": "java",
"code": "class SORTracker {\n\n public SORTracker() {\n \n }\n \n public void add(String name, int score) {\n \n }\n \n public String get() {\n \n }\n}\n\n/**\n * Your SORTracker object will be instantiated and called as such:\n * SORTracker obj = new SORTracker();\n * obj.add(name,score);\n * String param_2 = obj.get();\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Python",
"langSlug": "python",
"code": "class SORTracker(object):\n\n def __init__(self):\n \n\n def add(self, name, score):\n \"\"\"\n :type name: str\n :type score: int\n :rtype: None\n \"\"\"\n \n\n def get(self):\n \"\"\"\n :rtype: str\n \"\"\"\n \n\n\n# Your SORTracker object will be instantiated and called as such:\n# obj = SORTracker()\n# obj.add(name,score)\n# param_2 = obj.get()",
"__typename": "CodeSnippetNode"
},
{
"lang": "Python3",
"langSlug": "python3",
"code": "class SORTracker:\n\n def __init__(self):\n \n\n def add(self, name: str, score: int) -> None:\n \n\n def get(self) -> str:\n \n\n\n# Your SORTracker object will be instantiated and called as such:\n# obj = SORTracker()\n# obj.add(name,score)\n# param_2 = obj.get()",
"__typename": "CodeSnippetNode"
},
{
"lang": "C",
"langSlug": "c",
"code": "\n\n\ntypedef struct {\n \n} SORTracker;\n\n\nSORTracker* sORTrackerCreate() {\n \n}\n\nvoid sORTrackerAdd(SORTracker* obj, char * name, int score) {\n \n}\n\nchar * sORTrackerGet(SORTracker* obj) {\n \n}\n\nvoid sORTrackerFree(SORTracker* obj) {\n \n}\n\n/**\n * Your SORTracker struct will be instantiated and called as such:\n * SORTracker* obj = sORTrackerCreate();\n * sORTrackerAdd(obj, name, score);\n \n * char * param_2 = sORTrackerGet(obj);\n \n * sORTrackerFree(obj);\n*/",
"__typename": "CodeSnippetNode"
},
{
"lang": "C#",
"langSlug": "csharp",
"code": "public class SORTracker {\n\n public SORTracker() {\n \n }\n \n public void Add(string name, int score) {\n \n }\n \n public string Get() {\n \n }\n}\n\n/**\n * Your SORTracker object will be instantiated and called as such:\n * SORTracker obj = new SORTracker();\n * obj.Add(name,score);\n * string param_2 = obj.Get();\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "JavaScript",
"langSlug": "javascript",
"code": "\nvar SORTracker = function() {\n \n};\n\n/** \n * @param {string} name \n * @param {number} score\n * @return {void}\n */\nSORTracker.prototype.add = function(name, score) {\n \n};\n\n/**\n * @return {string}\n */\nSORTracker.prototype.get = function() {\n \n};\n\n/** \n * Your SORTracker object will be instantiated and called as such:\n * var obj = new SORTracker()\n * obj.add(name,score)\n * var param_2 = obj.get()\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Ruby",
"langSlug": "ruby",
"code": "class SORTracker\n def initialize()\n \n end\n\n\n=begin\n :type name: String\n :type score: Integer\n :rtype: Void\n=end\n def add(name, score)\n \n end\n\n\n=begin\n :rtype: String\n=end\n def get()\n \n end\n\n\nend\n\n# Your SORTracker object will be instantiated and called as such:\n# obj = SORTracker.new()\n# obj.add(name, score)\n# param_2 = obj.get()",
"__typename": "CodeSnippetNode"
},
{
"lang": "Swift",
"langSlug": "swift",
"code": "\nclass SORTracker {\n\n init() {\n \n }\n \n func add(_ name: String, _ score: Int) {\n \n }\n \n func get() -> String {\n \n }\n}\n\n/**\n * Your SORTracker object will be instantiated and called as such:\n * let obj = SORTracker()\n * obj.add(name, score)\n * let ret_2: String = obj.get()\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Go",
"langSlug": "golang",
"code": "type SORTracker struct {\n \n}\n\n\nfunc Constructor() SORTracker {\n \n}\n\n\nfunc (this *SORTracker) Add(name string, score int) {\n \n}\n\n\nfunc (this *SORTracker) Get() string {\n \n}\n\n\n/**\n * Your SORTracker object will be instantiated and called as such:\n * obj := Constructor();\n * obj.Add(name,score);\n * param_2 := obj.Get();\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Scala",
"langSlug": "scala",
"code": "class SORTracker() {\n\n def add(name: String, score: Int) {\n \n }\n\n def get(): String = {\n \n }\n\n}\n\n/**\n * Your SORTracker object will be instantiated and called as such:\n * var obj = new SORTracker()\n * obj.add(name,score)\n * var param_2 = obj.get()\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Kotlin",
"langSlug": "kotlin",
"code": "class SORTracker() {\n\n fun add(name: String, score: Int) {\n \n }\n\n fun get(): String {\n \n }\n\n}\n\n/**\n * Your SORTracker object will be instantiated and called as such:\n * var obj = SORTracker()\n * obj.add(name,score)\n * var param_2 = obj.get()\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Rust",
"langSlug": "rust",
"code": "struct SORTracker {\n\n}\n\n\n/** \n * `&self` means the method takes an immutable reference.\n * If you need a mutable reference, change it to `&mut self` instead.\n */\nimpl SORTracker {\n\n fn new() -> Self {\n \n }\n \n fn add(&self, name: String, score: i32) {\n \n }\n \n fn get(&self) -> String {\n \n }\n}\n\n/**\n * Your SORTracker object will be instantiated and called as such:\n * let obj = SORTracker::new();\n * obj.add(name, score);\n * let ret_2: String = obj.get();\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "PHP",
"langSlug": "php",
"code": "class SORTracker {\n /**\n */\n function __construct() {\n \n }\n \n /**\n * @param String $name\n * @param Integer $score\n * @return NULL\n */\n function add($name, $score) {\n \n }\n \n /**\n * @return String\n */\n function get() {\n \n }\n}\n\n/**\n * Your SORTracker object will be instantiated and called as such:\n * $obj = SORTracker();\n * $obj->add($name, $score);\n * $ret_2 = $obj->get();\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "TypeScript",
"langSlug": "typescript",
"code": "class SORTracker {\n constructor() {\n\n }\n\n add(name: string, score: number): void {\n\n }\n\n get(): string {\n\n }\n}\n\n/**\n * Your SORTracker object will be instantiated and called as such:\n * var obj = new SORTracker()\n * obj.add(name,score)\n * var param_2 = obj.get()\n */",
"__typename": "CodeSnippetNode"
},
{
"lang": "Racket",
"langSlug": "racket",
"code": "(define sor-tracker%\n (class object%\n (super-new)\n \n (init-field)\n \n ; add : string? exact-integer? -> void?\n (define/public (add name score)\n\n )\n ; get : -> string?\n (define/public (get)\n\n )))\n\n;; Your sor-tracker% object will be instantiated and called as such:\n;; (define obj (new sor-tracker%))\n;; (send obj add name score)\n;; (define param_2 (send obj get))",
"__typename": "CodeSnippetNode"
},
{
"lang": "Erlang",
"langSlug": "erlang",
"code": "-spec sor_tracker_init_() -> any().\nsor_tracker_init_() ->\n .\n\n-spec sor_tracker_add(Name :: unicode:unicode_binary(), Score :: integer()) -> any().\nsor_tracker_add(Name, Score) ->\n .\n\n-spec sor_tracker_get() -> unicode:unicode_binary().\nsor_tracker_get() ->\n .\n\n\n%% Your functions will be called as such:\n%% sor_tracker_init_(),\n%% sor_tracker_add(Name, Score),\n%% Param_2 = sor_tracker_get(),\n\n%% sor_tracker_init_ will be called before every test case, in which you can do some necessary initializations.",
"__typename": "CodeSnippetNode"
},
{
"lang": "Elixir",
"langSlug": "elixir",
"code": "defmodule SORTracker do\n @spec init_() :: any\n def init_() do\n\n end\n\n @spec add(name :: String.t, score :: integer) :: any\n def add(name, score) do\n\n end\n\n @spec get() :: String.t\n def get() do\n\n end\nend\n\n# Your functions will be called as such:\n# SORTracker.init_()\n# SORTracker.add(name, score)\n# param_2 = SORTracker.get()\n\n# SORTracker.init_ will be called before every test case, in which you can do some necessary initializations.",
"__typename": "CodeSnippetNode"
}
],
"stats": "{\"totalAccepted\": \"4.4K\", \"totalSubmission\": \"7K\", \"totalAcceptedRaw\": 4404, \"totalSubmissionRaw\": 7036, \"acRate\": \"62.6%\"}",
"hints": [
"If the problem were to find the median of a stream of scenery locations while they are being added, can you solve it?",
"We can use a similar approach as an optimization to avoid repeated sorting.",
"Employ two heaps: left heap and right heap. The left heap is a max-heap, and the right heap is a min-heap. The size of the left heap is k + 1 (best locations), where k is the number of times the get method was invoked. The other locations are maintained in the right heap.",
"Every time when add is being called, we add it to the left heap. If the size of the left heap exceeds k + 1, we move the head element to the right heap.",
"When the get method is invoked again (the k + 1 time it is invoked), we can return the head element of the left heap. But before returning it, if the right heap is not empty, we maintain the left heap to have the best k + 2 items by moving the best location from the right heap to the left heap."
],
"solution": null,
"status": null,
"sampleTestCase": "[\"SORTracker\",\"add\",\"add\",\"get\",\"add\",\"get\",\"add\",\"get\",\"add\",\"get\",\"add\",\"get\",\"get\"]\n[[],[\"bradford\",2],[\"branford\",3],[],[\"alps\",2],[],[\"orland\",2],[],[\"orlando\",3],[],[\"alpine\",2],[],[]]",
"metaData": "{\n \"classname\": \"SORTracker\",\n \"constructor\": {\n \"params\": []\n },\n \"methods\": [\n {\n \"params\": [\n {\n \"type\": \"string\",\n \"name\": \"name\"\n },\n {\n \"type\": \"integer\",\n \"name\": \"score\"\n }\n ],\n \"name\": \"add\",\n \"return\": {\n \"type\": \"void\"\n }\n },\n {\n \"params\": [],\n \"name\": \"get\",\n \"return\": {\n \"type\": \"string\"\n }\n }\n ],\n \"return\": {\n \"type\": \"boolean\"\n },\n \"systemdesign\": true\n}",
"judgerAvailable": true,
"judgeType": "large",
"mysqlSchemas": [],
"enableRunCode": true,
"enableTestMode": false,
"enableDebugger": true,
"envInfo": "{\"cpp\": [\"C++\", \"<p>Compiled with <code> clang 11 </code> using the latest C++ 17 standard.</p>\\r\\n\\r\\n<p>Your code is compiled with level two optimization (<code>-O2</code>). <a href=\\\"https://github.com/google/sanitizers/wiki/AddressSanitizer\\\" target=\\\"_blank\\\">AddressSanitizer</a> is also enabled to help detect out-of-bounds and use-after-free bugs.</p>\\r\\n\\r\\n<p>Most standard library headers are already included automatically for your convenience.</p>\"], \"java\": [\"Java\", \"<p><code> OpenJDK 17 </code>. Java 8 features such as lambda expressions and stream API can be used. </p>\\r\\n\\r\\n<p>Most standard library headers are already included automatically for your convenience.</p>\\r\\n<p>Includes <code>Pair</code> class from https://docs.oracle.com/javase/8/javafx/api/javafx/util/Pair.html.</p>\"], \"python\": [\"Python\", \"<p><code>Python 2.7.12</code>.</p>\\r\\n\\r\\n<p>Most libraries are already imported automatically for your convenience, such as <a href=\\\"https://docs.python.org/2/library/array.html\\\" target=\\\"_blank\\\">array</a>, <a href=\\\"https://docs.python.org/2/library/bisect.html\\\" target=\\\"_blank\\\">bisect</a>, <a href=\\\"https://docs.python.org/2/library/collections.html\\\" target=\\\"_blank\\\">collections</a>. If you need more libraries, you can import it yourself.</p>\\r\\n\\r\\n<p>For Map/TreeMap data structure, you may use <a href=\\\"http://www.grantjenks.com/docs/sortedcontainers/\\\" target=\\\"_blank\\\">sortedcontainers</a> library.</p>\\r\\n\\r\\n<p>Note that Python 2.7 <a href=\\\"https://www.python.org/dev/peps/pep-0373/\\\" target=\\\"_blank\\\">will not be maintained past 2020</a>. For the latest Python, please choose Python3 instead.</p>\"], \"c\": [\"C\", \"<p>Compiled with <code>gcc 8.2</code> using the gnu99 standard.</p>\\r\\n\\r\\n<p>Your code is compiled with level one optimization (<code>-O1</code>). <a href=\\\"https://github.com/google/sanitizers/wiki/AddressSanitizer\\\" target=\\\"_blank\\\">AddressSanitizer</a> is also enabled to help detect out-of-bounds and use-after-free bugs.</p>\\r\\n\\r\\n<p>Most standard library headers are already included automatically for your convenience.</p>\\r\\n\\r\\n<p>For hash table operations, you may use <a href=\\\"https://troydhanson.github.io/uthash/\\\" target=\\\"_blank\\\">uthash</a>. \\\"uthash.h\\\" is included by default. Below are some examples:</p>\\r\\n\\r\\n<p><b>1. Adding an item to a hash.</b>\\r\\n<pre>\\r\\nstruct hash_entry {\\r\\n int id; /* we'll use this field as the key */\\r\\n char name[10];\\r\\n UT_hash_handle hh; /* makes this structure hashable */\\r\\n};\\r\\n\\r\\nstruct hash_entry *users = NULL;\\r\\n\\r\\nvoid add_user(struct hash_entry *s) {\\r\\n HASH_ADD_INT(users, id, s);\\r\\n}\\r\\n</pre>\\r\\n</p>\\r\\n\\r\\n<p><b>2. Looking up an item in a hash:</b>\\r\\n<pre>\\r\\nstruct hash_entry *find_user(int user_id) {\\r\\n struct hash_entry *s;\\r\\n HASH_FIND_INT(users, &user_id, s);\\r\\n return s;\\r\\n}\\r\\n</pre>\\r\\n</p>\\r\\n\\r\\n<p><b>3. Deleting an item in a hash:</b>\\r\\n<pre>\\r\\nvoid delete_user(struct hash_entry *user) {\\r\\n HASH_DEL(users, user); \\r\\n}\\r\\n</pre>\\r\\n</p>\"], \"csharp\": [\"C#\", \"<p><a href=\\\"https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9\\\" target=\\\"_blank\\\">C# 10 with .NET 6 runtime</a></p>\\r\\n\\r\\n<p>Your code is compiled with debug flag enabled (<code>/debug</code>).</p>\"], \"javascript\": [\"JavaScript\", \"<p><code>Node.js 16.13.2</code>.</p>\\r\\n\\r\\n<p>Your code is run with <code>--harmony</code> flag, enabling <a href=\\\"http://node.green/\\\" target=\\\"_blank\\\">new ES6 features</a>.</p>\\r\\n\\r\\n<p><a href=\\\"https://lodash.com\\\" target=\\\"_blank\\\">lodash.js</a> library is included by default.</p>\\r\\n\\r\\n<p>For Priority Queue / Queue data structures, you may use <a href=\\\"https://github.com/datastructures-js/priority-queue\\\" target=\\\"_blank\\\">datastructures-js/priority-queue</a> and <a href=\\\"https://github.com/datastructures-js/queue\\\" target=\\\"_blank\\\">datastructures-js/queue</a>.</p>\"], \"ruby\": [\"Ruby\", \"<p><code>Ruby 3.1</code></p>\\r\\n\\r\\n<p>Some common data structure implementations are provided in the Algorithms module: https://www.rubydoc.info/github/kanwei/algorithms/Algorithms</p>\"], \"swift\": [\"Swift\", \"<p><code>Swift 5.5.2</code>.</p>\"], \"golang\": [\"Go\", \"<p><code>Go 1.17.6</code>.</p>\\r\\n\\r\\n<p>Support <a href=\\\"https://godoc.org/github.com/emirpasic/gods\\\" target=\\\"_blank\\\">https://godoc.org/github.com/emirpasic/gods</a> library.</p>\"], \"python3\": [\"Python3\", \"<p><code>Python 3.10</code>.</p>\\r\\n\\r\\n<p>Most libraries are already imported automatically for your convenience, such as <a href=\\\"https://docs.python.org/3/library/array.html\\\" target=\\\"_blank\\\">array</a>, <a href=\\\"https://docs.python.org/3/library/bisect.html\\\" target=\\\"_blank\\\">bisect</a>, <a href=\\\"https://docs.python.org/3/library/collections.html\\\" target=\\\"_blank\\\">collections</a>. If you need more libraries, you can import it yourself.</p>\\r\\n\\r\\n<p>For Map/TreeMap data structure, you may use <a href=\\\"http://www.grantjenks.com/docs/sortedcontainers/\\\" target=\\\"_blank\\\">sortedcontainers</a> library.</p>\"], \"scala\": [\"Scala\", \"<p><code>Scala 2.13.7</code>.</p>\"], \"kotlin\": [\"Kotlin\", \"<p><code>Kotlin 1.3.10</code>.</p>\"], \"rust\": [\"Rust\", \"<p><code>Rust 1.58.1</code></p>\\r\\n\\r\\n<p>Supports <a href=\\\"https://crates.io/crates/rand\\\" target=\\\"_blank\\\">rand </a> v0.6\\u00a0from crates.io</p>\"], \"php\": [\"PHP\", \"<p><code>PHP 8.1</code>.</p>\\r\\n<p>With bcmath module</p>\"], \"typescript\": [\"Typescript\", \"<p><code>TypeScript 4.5.4, Node.js 16.13.2</code>.</p>\\r\\n\\r\\n<p>Your code is run with <code>--harmony</code> flag, enabling <a href=\\\"http://node.green/\\\" target=\\\"_blank\\\">new ES2020 features</a>.</p>\\r\\n\\r\\n<p><a href=\\\"https://lodash.com\\\" target=\\\"_blank\\\">lodash.js</a> library is included by default.</p>\"], \"racket\": [\"Racket\", \"<p>Run with <code>Racket 8.3</code>.</p>\"], \"erlang\": [\"Erlang\", \"Erlang/OTP 24.2\"], \"elixir\": [\"Elixir\", \"Elixir 1.13.0 with Erlang/OTP 24.2\"]}",
"libraryUrl": null,
"adminUrl": null,
"challengeQuestion": null,
"__typename": "QuestionNode"
}
}
}