【bzoj1056】排名系统
1056: [HAOI2008]排名系统
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 2195 Solved: 623
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
+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的排名
Sample Output
CATHY TOM ADAM BOB
CATHY LEO KAINE WALT MICK GRACE SANDY JACK TOM BOB
WALT MICK GRACE SANDY JACK TOM BOB ADAM DAM
4
HINT
N<=250000
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<algorithm>
using namespace std;
const int INF=;
int n,root,tot,len,head[INF+];
struct node1{int v,next,time;char ch[];}hash[];
struct node2{int v,time,fix,size,l,r; char ch[];}tr[];
void updata(int p) {tr[p].size=tr[tr[p].l].size+tr[tr[p].r].size+;}
void lturn(int &p) {int c=tr[p].r; tr[p].r=tr[c].l; tr[c].l=p; tr[c].size=tr[p].size; updata(p); p=c;}
void rturn(int &p) {int c=tr[p].l; tr[p].l=tr[c].r; tr[c].r=p; tr[c].size=tr[p].size; updata(p); p=c;}
bool cmp(char a[],char b[]) {for(int i=;i<max(strlen(a),strlen(b));i++) if(a[i]!=b[i]) return ;return ;}
int Hash(char ch[]) {int s=; for(int i=;i<strlen(ch);i++) {s*=; s+=ch[i]-'A'+; s%=INF;} return s;}
void insert(int &p,int v,int time,char ch[])
{
if(!p)
{
p=++len; tr[p].size=; tr[p].v=v; tr[p].time=time; tr[p].fix=rand();
memcpy(tr[p].ch,ch,strlen(ch)); return;
}
tr[p].size++;
if(v<=tr[p].v) {insert(tr[p].l,v,time,ch); if(tr[p].fix>tr[tr[p].l].fix) rturn(p);}
else {insert(tr[p].r,v,time,ch); if(tr[p].fix>tr[tr[p].r].fix) lturn(p);}
}
void del(int &p,int v,int time)
{
if(v==tr[p].v)
{
if(time==tr[p].time)
{
if(tr[p].l*tr[p].r==) p=tr[p].l+tr[p].r;
else if(tr[tr[p].l].fix<tr[tr[p].r].fix) {rturn(p); del(p,v,time);}
else {lturn(p); del(p,v,time);}
}
else if(time>tr[p].time) {tr[p].size--; del(tr[p].l,v,time);}
else {tr[p].size--; del(tr[p].r,v,time);}
}
else if(v<tr[p].v) {tr[p].size--; del(tr[p].l,v,time);}
else {tr[p].size--; del(tr[p].r,v,time);}
}
void work(char ch[],int x,int time)
{
int k=Hash(ch); int i=head[k];
while(i)
{
if(cmp(hash[i].ch,ch))
{
del(root,hash[i].v,hash[i].time);
hash[i].time=time; hash[i].v=x;
insert(root,x,time,ch);
return;
}
i=hash[i].next;
}
tot++;
hash[tot].time=time; hash[tot].v=x;
hash[tot].next=head[k]; head[k]=tot;
memcpy(hash[tot].ch,ch,strlen(ch));
insert(root,x,time,ch);
}
int get(char ch[])
{
int k=Hash(ch);int i=head[k];
while(i)
{
if(cmp(hash[i].ch,ch))return i;
i=hash[i].next;
}
}
int rank(int p,int v,int time)
{
if(p==) return ;
if(tr[p].v==v)
{
if(tr[p].time==time) return tr[tr[p].r].size+;
else if(time<tr[p].time) return rank(tr[p].r,v,time);
else return tr[tr[p].r].size++rank(tr[p].l,v,time);
}
else if(v>tr[p].v) return rank(tr[p].r,v,time);
else return tr[tr[p].r].size++rank(tr[p].l,v,time);
}
void ask1(char ch[])
{
int t=get(ch);
printf("%d\n",rank(root,hash[t].v,hash[t].time));
}
int index(int k,int x)
{
if(tr[tr[k].r].size+==x)return k;
else if(x<=tr[tr[k].r].size)return index(tr[k].r,x);
else return index(tr[k].l,x-tr[tr[k].r].size-);
}
void ask2(char ch[])
{
int s=;
for(int i=;i<strlen(ch);i++){s*=;s+=ch[i]-'';}
for(int i=s;i<=tot&&i<=s+;i++)
{
printf("%s",tr[index(root,i)].ch+);
if(i<tot&&i<s+)printf(" ");
}
printf("\n");
}
int main()
{
freopen("cin.in","r",stdin);
freopen("cout.out","w",stdout);
scanf("%d",&n); char ch[]; int x;
for(int i=;i<=n;i++)
{
scanf("%s",ch);
if(ch[]=='+') {scanf("%d",&x); work(ch,x,i);}
else if(ch[]>='A'&&ch[]<='Z') ask1(ch);
else ask2(ch);
}
return ;
}
【bzoj1056】排名系统的更多相关文章
- [BZOJ1056][BZOJ1862][HAOI2008][Zjoi2006]排名系统
[BZOJ1056][BZOJ1862][HAOI2008][Zjoi2006]排名系统 试题描述 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录 ...
- 【BZOJ1056】[HAOI2008]排名系统(Splay)
[BZOJ1056][HAOI2008]排名系统(Splay) 题面 BZOJ 洛谷 题解 \(Splay\)随便维护一下就好了,至于名字什么的,我懒得手写哈希表了,直接哈希之后拿\(map\)压. ...
- [bzoj1056] [HAOI2008]排名系统
Description 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录.当某个玩家上传自己最新的得分记录时,他原有的得分记录会被删除.为了减轻服务 ...
- BZOJ 1862: [Zjoi2006]GameZ游戏排名系统 [treap hash]
1862: [Zjoi2006]GameZ游戏排名系统 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1318 Solved: 498[Submit][ ...
- 【BZOJ】1862: [Zjoi2006]GameZ游戏排名系统 & 1056: [HAOI2008]排名系统(treap+非常小心)
http://www.lydsy.com/JudgeOnline/problem.php?id=1862 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- 1056: [HAOI2008]排名系统 - BZOJ
Description 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录.当某个玩家上传自己最新的得分记录时,他原有的得分记录会被删除.为了减轻服务 ...
- HNOI2008 and ZJOI2006 排名系统
1056: [HAOI2008]排名系统 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1311 Solved: 337[Submit][Statu ...
- 数据结构(Splay平衡树):HAOI2008 排名系统
[HAOI2008] 排名系统 [题目描述] 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录.当某个玩家上传自己最新的得分记录时,他原有的得分记录 ...
- bzoj 1056 [HAOI2008]排名系统(1862 [Zjoi2006]GameZ游戏排名系统)
1056: [HAOI2008]排名系统 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 502[Submit][Statu ...
随机推荐
- 人生苦短之我用Python篇(线程/进程、threading模块:全局解释器锁gil/信号量/Event、)
线程: 有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.是一串指令的集合.线程是程序中一个单一的顺序控制流程.进程内一个相对独立的.可调度的执行单元,是 ...
- ORM 关键
1. 老师的增删改查 1. teacher_obj.cid.add(*[1, 2, 3]) 添加(必须打散) 2. teacher_obj.cid.set([1, 2, 3]) 设置(不用打散) 2. ...
- eclipse javaw.exe in your current path问题
问题: 第一次运行eclipse的时候,可能会提醒找不到javaw.exe ******等的问题 很坑的! 解决方案: 无法启动Eclipe,因找不到javaw.exe 还是环境变量的问题!!! 注意 ...
- 【学习】JennyHui学自动化测试
学习材料:虫师的Python书,乙醇的教程 Selenium 常用的键盘事件 智能等待 处理富文本框 定位 界面数据与数据库数据对比 Excel操作 下载文件 Selenium 2.0 学习笔记 == ...
- 老师木发的makefile与autotools
makefile http://scc.qibebt.cas.cn/docs/linux/base/%B8%FA%CE%D2%D2%BB%C6%F0%D0%B4Makefile-%B3%C2%F0%A ...
- LA2572 Viva Confetti
题意 PDF 分析 两两圆求交点,对每个圆弧按半径抖动. 时间复杂度\(O(T n^2)\) 代码 #include<iostream> #include<cstdio> #i ...
- 自定义springmvc统一异常处理器(实现HandlerExceptionResolver接口)不起作用的一种情况
ExceptionResolverCustom 这个是自定义的异常处理器类. 在springmvc中注册 在web.xml文件中屏蔽springmvc自动注册的异常处理器 网上的资料就是这么配置的,可 ...
- Ambari client
在研究如何修改YARN的资源池的时候,发现了Hortwork在github上面开源了一个Ambari Client: https://github.com/apache/ambari/tree/tru ...
- 洛谷 1155 (NOIp2008)双栈排序——仔细分析不合法的条件
题目:https://www.luogu.org/problemnew/show/P1155 这道题教会我们要多思考. 好好分析过后发现同一个栈里不能有升序.就用它写了一个30分. #include& ...
- 洛谷 1291 [SHOI2002]百事世界杯之旅
题目:https://www.luogu.org/problemnew/show/P1291 大水题!套路!模板! 稍微注意一下输出就行了. #include<iostream> #inc ...