1056: [HAOI2008]排名系统

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2487  Solved: 711
[Submit][Status][Discuss]

Description

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

Input

  第一行是一个整数n(n>=10)表示请求总数目。接下来n行,每行包含了一个请求。请求的具体格式如下: +Na
me Score 上传最新得分记录。Name表示玩家名字,由大写英文字母组成,不超过10个字符。Score为最多8位的正
整数。 ?Name 查询玩家排名。该玩家的得分记录必定已经在前面上传。 ?Index 返回自第Index名开始的最多10名
玩家名字。Index必定合法,即不小于1,也不大于当前有记录的玩家总数。

Output

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

Sample Input

Input

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

Output

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

说明

+ADAM 1000000     加入ADAM的得分记录

+BOB 1000000      加入BOB的得分记录

+TOM 2000000      加入TOM的得分记录

+CATHY 10000000   加入CATHY的得分记录

?TOM              输出TOM目前排名

?1                目前有记录的玩家总数为4,因此应输出第1名到第4名。

+DAM 100000       加入DAM的得分记录

+BOB 1200000      更新BOB的得分记录

+ADAM 900000      更新ADAM的得分记录(即使比原来的差)

+FRANK 12340000   加入FRANK的得分记录

+LEO 9000000      加入LEO的得分记录

+KAINE 9000000    加入KAINE的得分记录

+GRACE 8000000    加入GRACE的得分记录

+WALT 9000000     加入WALT的得分记录

+SANDY 8000000    加入SANDY的得分记录

+MICK 9000000     加入MICK的得分记录

+JACK 7320000     加入JACK的得分记录

?2                目前有记录的玩家总数为12,因此应输出第2名到第11名。

?5                输出第5名到第13名。

?KAINE            输出KAINE的排名

[数据范围]

20%数据满足N<=100

100%数据满足N<=250000

写了5个小时的splay,硬是没跳出来(WA代码还在COGS上呆着)

后来弃疗,直接pd_ds,1A。

#include<cstdio>
#include<iostream>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
class P{
public:
string name;
int val,tim;
P(string n="",int v=,int t=):name(n),val(v),tim(t){}
}z;
class Compare{
public:
bool operator ()(const P &a,const P &b)const{
if(a.val>b.val) return ;
if(a.val<b.val) return ;
if(a.tim<b.tim) return ;
if(a.tim>b.tim) return ;
return a.name<b.name;
}
};
typedef cc_hash_table<string,P> hs;
typedef tree<P,null_mapped_type,Compare,rb_tree_tag,tree_order_statistics_node_update> bbt;
hs ys;
hs::point_iterator ith;
bbt T;
bbt::iterator itt;
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int main(){
int n;char s[];
n=read();
for(int i=,x;i<=n;i++){
scanf("%s",s);
if(s[]=='+'){//upload recod
x=read();
ith=ys.find(s+);
if(ith!=ys.end()) T.erase(ith->second);
z=P(s+,x,i);
ys[s+]=z;
T.insert(z);
}
else if(s[]>=''&&s[]<=''){//query by order
x=atoi(s+);
itt=T.find_by_order(x-);
int lim=min(,(int)ys.size()-x+);
for(int j=;j<=lim;j++){
printf("%s",itt->name.c_str());
if(j!=lim) putchar(' ');
itt++;
}
if(i!=n) putchar('\n');
}
else{//query by name
printf("%d",T.order_of_key(ys[s+])+);
if(i!=n) putchar('\n');
}
}
return ;
}

[HAOI2008]排名系统& [Zjoi2006]GameZ游戏排名系统的更多相关文章

  1. [HAOI2008]排名系统 & [Zjoi2006]GameZ游戏排名系统 BZOJ1862&BZOJ1056

    分析: 平衡树裸题,(学完LCT感觉自己不会普通的Splay了...),维护每个节点的权值大小顺序,和时间戳顺序,之后map维护一下是否存在过,(懒得写字符串hash了). 附上代码: #includ ...

  2. BZOJ_1862_[Zjoi2006]GameZ游戏排名系统&&BZOJ_1056_[HAOI2008]排名系统_Splay

    BZOJ_1862_[Zjoi2006]GameZ游戏排名系统&&BZOJ_1056_[HAOI2008]排名系统_Splay Description 排名系统通常要应付三种请求:上传 ...

  3. BZOJ 1862: [Zjoi2006]GameZ游戏排名系统 [treap hash]

    1862: [Zjoi2006]GameZ游戏排名系统 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1318  Solved: 498[Submit][ ...

  4. bzoj 1056 [HAOI2008]排名系统(1862 [Zjoi2006]GameZ游戏排名系统)

    1056: [HAOI2008]排名系统 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1854  Solved: 502[Submit][Statu ...

  5. 【BZOJ】1862: [Zjoi2006]GameZ游戏排名系统 & 1056: [HAOI2008]排名系统(treap+非常小心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1862 http://www.lydsy.com/JudgeOnline/problem.php?id ...

  6. bzoj1056: [HAOI2008]排名系统 && 1862: [Zjoi2006]GameZ游戏排名系统

    hash 加上 平衡树(名次树). 这道题麻烦的地方就在于输入的是一个名字,所以需要hash. 这个hash用的是向后探查避免冲突,如果用类似前向星的方式避免冲突,比较难写,容易挂掉,但也速度快些. ...

  7. bzoj 1862: [Zjoi2006]GameZ游戏排名系统 & bzoj 1056: [HAOI2008]排名系统

    傻叉了一晚上,把t打成x,然后这题神奇在于输出一段数,不足的不用输出,一开始我的是直接找没有后面就退,然后这样会格式错误囧……然后最后zj的还卡了下空间,于是不用string就过了……string毁一 ...

  8. 【pb_ds】bzoj1056 [HAOI2008]排名系统/bzoj1862 [Zjoi2006]GameZ游戏排名系统

    STL裸题,线下AC,bzoj无限RE ing…… #include<cstdio> #include<cctype> #include<iostream> #in ...

  9. 1056/1862. [ZJOI2006]GameZ游戏排名系统【平衡树-splay】

    Description GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在世界上的排名.得分越高,排名就越靠前.当两个玩家的名次相同时 ...

随机推荐

  1. SSH限制ip登陆

    linux限制IP访问ssh   在/etc/hosts.allow输入   (其中192.168.10.88是你要允许登陆ssh的ip,或者是一个网段192.168.10.0/24)   sshd: ...

  2. Specification模式的一个不错的示例代码

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Specifi ...

  3. C#定时任务的偷懒实现

    通常会有些定时任务的工作,例如每分钟统计一下xxx用户的xxx数量 或者 定时拉取下数据 之类的任务. 通常要实现定时调度功能和控制线程是否可以并发执行. 所以通常一个简单的小项目搞成大项目,但是使用 ...

  4. SecureCRT终端上使用spark-shell时按退格键无反应的解决方法

    问题:用SecureCRT远程连接至Spark集群,启动spark-shell却发现输错命令后却无法用退格键删除. 解决方法: 第一步: 在SecureCRT的菜单栏选择“OPtions(选项)”按钮 ...

  5. Atiti. Php Laravel 5.1 环境搭建以及  error 排除

    Atiti. Php Laravel 5.1 环境搭建以及  error 排除 1. php_5.6.11_apache2.41 1.1. Httpd.Conf增加以下配置,添加php支持1 1.2. ...

  6. Atitit.java的浏览器插件技术 Applet japplet attilax总结

    Atitit.java的浏览器插件技术  Applet  japplet attilax总结 1. Applet类及各个方法说明 1 2. JApplet类示例 2 3. / 用main方法运行JAp ...

  7. [docker]docker日志驱动记录nginx日志情形探究

    这里研究下容器nginx记录日志的集中情况,主要想弄明白,docker的日志--log-driver=fluentd 改成fluentd后,会不会在本地在记录一份日志 整体架构是这样的 情况1: 首先 ...

  8. LFCS 系列第八讲:管理用户和用户组、文件权限和属性以及启用账户 sudo 访问权限

    由于 Linux 是一个多用户的操作系统(允许多个用户通过不同主机或者终端访问一个独立系统),因此你需要知道如何才能有效地管理用户:如何添加.编辑.禁用和删除用户账户,并赋予他们足以完成自身任务的必要 ...

  9. docker动态添加磁盘

    docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter #!/bin/bash #This script is dynamic mount ...

  10. 字符串操作:int 转 string

    strstream ss; string ch; ss<<i; ss>>ch;