题目名称 926. [河南省队2012] 忠诚点数榜
输入输出 lp.in/out
难度等级
时间限制 200 ms (0.2 s)
内存限制 512 MiB
测试数据 10
题目来源 Gravatarkaaala 于2012-07-16加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:2, 提交:3, 通过率:66.67%
Gravatarkaaala 100 0.606 s 13.63 MiB C++
Gravatar真呆菌 100 0.651 s 253.99 MiB C++
GravatarMakazeu 70 0.936 s 6.03 MiB C++
本题关联比赛
20120720
关于 忠诚点数榜 的近10条评论(全部评论)
0.2m啊!!! 我的 map+SBT超时3组。
map 是用来当 已【字符串】为关键字的平衡树
SBT是以【分数】为关键字的平衡树
如果有时间就把map改用Trie试试~省去了一个LogN的复杂度和一坨很大的常数~~
GravatarMakazeu
2012-07-20 21:36 2楼
卡的就是stl你们还用stl,呵呵
Gravatarkaaala
2012-07-20 14:54 1楼

926. [河南省队2012] 忠诚点数榜

★   输入文件:lp.in   输出文件:lp.out   简单对比
时间限制:0.2 s   内存限制:512 MiB

萨沙入侵开始了!萨沙是一群穷凶极恶的海盗,他们在入侵我们的星域,企图占领整个宇宙。

统合部为了保护星域的安全,决定设置一个忠诚点数榜单以激励飞行员去干掉这群入侵者。

然而,统合部的工程师不知道如何编辑这个榜单,于是他们找到了宇宙中最聪明的你,让你来完成这项工作。

榜单是一个自动化的系统。榜单接受3种操作:上传一条击杀记录、查询某飞行员当前排名以及返回某区间内排名记录。

当某飞行员上传新的击杀记录的时候,原有该飞行员的击杀记录将被删除。

为了减轻服务器的负担,统合部决定每次返回区间排名的时候,只返回10名飞行员的记录。

Input

第一行是一个整数n(10<=n<=250000)表示操作总数目。接下来n行,每行包含了一个操作。操作的具体格式如下:

+id  point 上传最新击杀记录。ID表示飞行员的编码,由大写英文字母组成,不超过10个字符。point为最多8位的正整数。

?id 查询飞行员排名。该飞行员的得分记录必定已经在前面上传。如果两个飞行员的得分相同,则先得到该得分的飞行员排在前面。

?num 返回自第num名开始的最多10名玩家名字。num必定合法,即不小于1,也不大于当前有记录的玩家总数。

Output

对与?id的操作,输出对应id飞行员当前排名

对与?Num的操作,在一行中输出从第num名起往后最多10名飞行员,每个飞行员中间用一个空格间隔。

样例:

lp.in

20

+ORZLCCOW 1000000

+BOB 1000000

+TB 2000000

+KAAALA 10000000

?TB

?1

+DAM 100000

+BOB 1200000

+ORZLCCOW 900000

+PB 12340000

+LEO 9000000

+POM 9000000

+GRACE 8000000

+WALT 9000000

+SANDY 8000000

+MICK 9000000

+JACK 7320000

?2

?5

?POM

lp.out

2

KAAALA TB ORZLCCOW BOB

KAAALA LEO POM WALT MICK GRACE SANDY JACK TB BOB

WALT MICK GRACE SANDY JACK TB BOB ORZLCCOW DAM

4


数据范围:

20%数据满足N<=100

100%数据满足N<=250000