<p>一个观光景点由它的名字 <code>name</code> 和景点评分 <code>score</code> 组成,其中 <code>name</code> 是所有观光景点中 <strong>唯一</strong> 的字符串,<code>score</code> 是一个整数。景点按照最好到最坏排序。景点评分 <strong>越高</strong> ,这个景点越好。如果有两个景点的评分一样,那么 <strong>字典序较小</strong> 的景点更好。</p> <p>你需要搭建一个系统,查询景点的排名。初始时系统里没有任何景点。这个系统支持:</p> <ul> <li><strong>添加</strong> 景点,每次添加 <strong>一个</strong> 景点。</li> <li><strong>查询 </strong>已经添加景点中第 <code>i</code> <strong>好</strong> 的景点,其中 <code>i</code> 是系统目前位置查询的次数(包括当前这一次)。 <ul> <li>比方说,如果系统正在进行第 <code>4</code> 次查询,那么需要返回所有已经添加景点中第 <code>4</code> 好的。</li> </ul> </li> </ul> <p>注意,测试数据保证 <strong>任意查询时刻</strong> ,查询次数都 <strong>不超过</strong> 系统中景点的数目。</p> <p>请你实现 <code>SORTracker</code> 类:</p> <ul> <li><code>SORTracker()</code> 初始化系统。</li> <li><code>void add(string name, int score)</code> 向系统中添加一个名为 <code>name</code> 评分为 <code>score</code> 的景点。</li> <li><code>string get()</code> 查询第 <code>i</code> 好的景点,其中 <code>i</code> 是目前系统查询的次数(包括当前这次查询)。</li> </ul> <p> </p> <p><strong>示例:</strong></p> <pre> <strong>输入:</strong> ["SORTracker", "add", "add", "get", "add", "get", "add", "get", "add", "get", "add", "get", "get"] [[], ["bradford", 2], ["branford", 3], [], ["alps", 2], [], ["orland", 2], [], ["orlando", 3], [], ["alpine", 2], [], []] <strong>输出:</strong> [null, null, null, "branford", null, "alps", null, "bradford", null, "bradford", null, "bradford", "orland"] <strong>解释:</strong> SORTracker tracker = new SORTracker(); // 初始化系统 tracker.add("bradford", 2); // 添加 name="bradford" 且 score=2 的景点。 tracker.add("branford", 3); // 添加 name="branford" 且 score=3 的景点。 tracker.get(); // 从好带坏的景点为:branford ,bradford 。 // 注意到 branford 比 bradford 好,因为它的 <strong>评分更高</strong> (3 > 2) 。 // 这是第 1 次调用 get() ,所以返回最好的景点:"branford" 。 tracker.add("alps", 2); // 添加 name="alps" 且 score=2 的景点。 tracker.get(); // 从好到坏的景点为:branford, alps, bradford 。 // 注意 alps 比 bradford 好,虽然它们评分相同,都为 2 。 // 这是因为 "alps" <strong>字典序</strong> 比 "bradford" 小。 // 返回第 2 好的地点 "alps" ,因为当前为第 2 次调用 get() 。 tracker.add("orland", 2); // 添加 name="orland" 且 score=2 的景点。 tracker.get(); // 从好到坏的景点为:branford, alps, bradford, orland 。 // 返回 "bradford" ,因为当前为第 3 次调用 get() 。 tracker.add("orlando", 3); // 添加 name="orlando" 且 score=3 的景点。 tracker.get(); // 从好到坏的景点为:branford, orlando, alps, bradford, orland 。 // 返回 "bradford". tracker.add("alpine", 2); // 添加 name="alpine" 且 score=2 的景点。 tracker.get(); // 从好到坏的景点为:branford, orlando, alpine, alps, bradford, orland 。 // 返回 "bradford" 。 tracker.get(); // 从好到坏的景点为:branford, orlando, alpine, alps, bradford, orland 。 // 返回 "orland" 。 </pre> <p> </p> <p><strong>提示:</strong></p> <ul> <li><code>name</code> 只包含小写英文字母,且每个景点名字互不相同。</li> <li><code>1 <= name.length <= 10</code></li> <li><code>1 <= score <= 10<sup>5</sup></code></li> <li>任意时刻,调用 <code>get</code> 的次数都不超过调用 <code>add</code> 的次数。</li> <li><strong>总共</strong> 调用 <code>add</code> 和 <code>get</code> 不超过 <code>4 * 10<sup>4</sup></code> </li> </ul>