bzoj#P1862. [Zjoi2006]GameZ游戏排名系统

[Zjoi2006]GameZ游戏排名系统

题目描述

GameZ 为他们最新推出的游戏开通了一个网站。世界各地的玩家都可以将自己的游戏得分上传到网站上。这样就可以看到自己在世界上的排名。得分越高,排名就越靠前。当两个玩家的名次相同时,先上传记录者优先。由于新游戏的火爆,网站服务器已经难堪重负。为此 GameZ 雇用了你来帮他们重新开发一套新的核心。

排名系统通常要应付三种请求:上传一条新的得分记录、查询某个玩家的当前排名以及返回某个区段内的排名记录。当某个玩家上传自己最新的得分记录时,他原有的得分记录会被删除。为了减轻服务器负担,在返回某个区段内的排名记录时,最多返回 1010 条记录。

输入格式

第一行是一个整数 nn 表示请求总数目。

接下来 nn 行每行包含了一个请求。请求的具体格式如下:

  • +Name Score 上传最新得分记录。Name 表示玩家名字,由大写英文字母组成,不超过 1010 个字符,Score为最多 88 位的正整数。
  • ?Name 查询玩家排名。该玩家的得分记录必定已经在前面上传。
  • ?Index 返回自第 Index名开始的最多 1010 名玩家名字。Index 必定合法,即不小于 11,也不大于当前有记录的玩家总数。

输入文件总大小不超过 2M2M

NOTE\text{NOTE}C++fstream读大规模数据的效率较低。

输出格式

对于每条查询请求,输出相应结果。

  • 对于 ?Name 格式的请求,应输出一个整数表示该玩家当前的排名。
  • 对于 ?Index 格式的请求,应在一行中依次输出从第 Index名开始的最多 1010 名玩家姓名,用一个空格分隔。

样例

20
+ADAM 1000000
+BOB 1000000 
+TOM 2000000
+CATHY 10000000
?TOM 
?1
+DAM 100000 
+BOB 1200000
+ADAM 900000 
+FRANK 12340000 
+LEO 9000000
+KAINE 9000000 
+GRACE 8000000 
+WALT 9000000 
+SANDY 8000000 
+MICK 9000000 
+JACK 7320000 
?2 
?5  
?KAINE
2
CATHY TOM ADAM BOB
CATHY LEO KAINE WALT MICK GRACE SANDY JACK TOM BOB
WALT MICK GRACE SANDY JACK TOM BOB ADAM DAM
4

样例解释

编号 操作 解释
1 +ADAM 1000000 加入 ADAM的得分记录
2 +BOB 1000000 加入 BOB的得分记录
3 +TOM 2000000 加入 TOM的得分记录
4 +CATHY 10000000 加入 CATHY的得分记录
5 ?TOM 输出 TOM目前排名
6 ?1 目前有记录的玩家总数为44 ,因此应输出第 11 名到第 44 名。
7 +DAM 100000 加入 DAM的得分记录
8 +BOB 1200000 更新 BOB的得分记录
9 +ADAM 900000 更新 ADAM的得分记录(即使比原来的差)
10 +FRANK 12340000 加入 FRANK的得分记录
11 +LEO 9000000 加入 LEO的得分记录
12 +KAINE 9000000 加入 KAINE的得分记录
13 +GRACE 8000000 加入 GRACE的得分记录
14 +WALT 9000000 加入 WALT的得分记录
15 +SANDY 8000000 加入 SANDY的得分记录
16 +MICK 9000000 加入 MICK的得分记录
17 +JACK 7320000 加入 JACK的得分记录
18 ?2 目前有记录的玩家总数为1212 ,因此应输出第 22 名到第 1111 名。
19 ?5 输出第55 名到第 1313 名。
20 ?KAINE 输出 KAINE的排名

数据规模与约定

对于 100%100\% 的数据,保证 10n10\le n

题目来源

[ZJOI2006]Day1