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

const
maxn=;
mm=;
var
hash,size,left,right,fix,value,time,num,shi,cost:array[..maxn]of longint;
who:array[..maxn,..]of longint;
trie:array[..maxn,'A'..'Z']of longint;
n,tot,total,peo,u,i,j,k,ii,t:longint;
s:string;
ch:char; procedure lt(var t:longint);
var
k:longint;
begin
k:=right[t];
right[t]:=left[k];
left[k]:=t;
size[k]:=size[t];
size[t]:=size[left[t]]+size[right[t]]+;
t:=k;
end; procedure rt(var t:longint);
var
k:longint;
begin
k:=left[t];
left[t]:=right[k];
right[k]:=t;
size[k]:=size[t];
size[t]:=size[left[t]]+size[right[t]]+;
t:=k;
end; procedure insert(var t:longint;y,z,l:longint);
begin
if t= then begin
inc(total);
t:=total;
value[t]:=y;
fix[t]:=random(mm);
time[t]:=z;
hash[t]:=l;
left[t]:=;
right[t]:=;
size[t]:=;
exit;
end;
inc(size[t]);
if y<=value[t] then begin
insert(right[t],y,z,l);
if fix[right[t]]<fix[t] then lt(t);
end
else begin
insert(left[t],y,z,l);
if fix[left[t]]<fix[t] then rt(t);
end;
end; procedure delete(var t:longint;y,z:longint);
begin
if t= then exit;
dec(size[t]);
if (value[t]=y) and (time[t]=z) then begin
if left[t]= then t:=right[t]
else
if right[t]= then t:=left[t]
else
if fix[right[t]]<fix[left[t]] then begin
lt(t);
delete(left[t],y,z);
end
else begin
rt(t);
delete(right[t],y,z);
end;
exit;
end;
if (y>value[t]) or (y=value[t]) and (z<time[t])
then delete(left[t],y,z)
else delete(right[t],y,z);
end; function rank(t,y,z:longint):longint;
begin
if t= then exit();
if (y=value[t]) and (z=time[t]) then exit(size[left[t]]+);
if (y>value[t]) or (y=value[t]) and (z<time[t]) then exit(rank(left[t],y,z));
exit(size[left[t]]++rank(right[t],y,z));
end; procedure outs(x:longint);
var
i:longint;
begin
for i:= to who[x][] do
write(chr(who[x][i]));
end; procedure find(t,x:longint;var y:longint);
begin
if (t=) or (y=) then exit;
if x<=size[left[t]] then begin
find(left[t],x,y);
if y> then begin
dec(y);
if y= then begin
outs(hash[t]);
writeln;
exit;
end;
outs(hash[t]);
write(' ');
find(right[t],,y);
end;
end
else begin
if x=size[left[t]]+ then begin
dec(y);
if y= then begin
outs(hash[t]);
writeln;
exit;
end;
outs(hash[t]);
write(' ');
inc(x);
end;
find(right[t],x-size[left[t]]-,y);
end;
end; begin
readln(n);
randomize;
peo:=;
total:=;
tot:=;
for ii:= to n do begin
read(ch);
if ch='+' then begin
u:=;
s:='';
read(ch);
repeat
s:=s+ch;
if trie[u][ch]= then begin
inc(tot);
trie[u][ch]:=tot;
end;
u:=trie[u][ch];
read(ch);
until ch=' ';
readln(j);
if num[u]= then begin
inc(peo);
num[u]:=peo;
cost[peo]:=j;
shi[peo]:=ii;
who[peo][]:=length(s);
for i:= to who[peo][] do who[peo][i]:=ord(s[i]);
insert(t,j,ii,peo);
end
else begin
delete(t,cost[num[u]],shi[num[u]]);
cost[num[u]]:=j;
shi[num[u]]:=ii;
insert(t,j,ii,num[u]);
end;
end
else
if ch='?' then begin
readln(s);
if (ord(s[])>=) and (ord(s[])<=) then begin
u:=;
for i:= to length(s) do u:=trie[u][s[i]];
writeln(rank(t,cost[num[u]],shi[num[u]]));
end
else begin
val(s,i);
j:=;
if i+j>peo then j:=peo-i+;
find(t,i,j);
end;
end;
end;
end.

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

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

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

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

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

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

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

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

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

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

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

  6. bzoj1056/1862 [Zjoi2006]GameZ游戏排名系统

    题目链接:1,2 treap恶心题,不多说 #include<algorithm> #include<iostream> #include<cstdlib> #in ...

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

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

  8. [HAOI2008]排名系统& [Zjoi2006]GameZ游戏排名系统

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

  9. [洛谷P2584][ZJOI2006]GameZ游戏排名系统

    题目大意:同[洛谷P4291][HAOI2008]排名系统(双倍经验) 题解:略 卡点:无 C++ Code: #include <cstdio> #include <map> ...

随机推荐

  1. 图片文件转换成Base64编码实现ajax提交图片

    //上传头像图片 function uploadHead(imgPath) { console.log("imgPath = " + imgPath); var image = n ...

  2. git 操作几个命令

     git clone ssh://lijianfeng@192.168.1.246:29418/GMGameSDK压栈:git stash查状态:git status切换到要修改的提交:git reb ...

  3. 用libevent实现的echo服务器及telnet客户端

    以下代码在vs 2010编译通过,使用的libevent版本是:libevent-2.0.22,win7环境测试通过. 服务器实现: 1 流程图: 2 代码: // my_telnet.cpp : D ...

  4. 第六章 高级I/O函数

    第六章 高级I/O函数 6.1 pipe函数 即管道函数,用于进程间的通信. #include<unistd.h> int pipe(int fd[2]); // fd:filedes / ...

  5. VMware SDK使用指南

    刚开始用VMware官方推荐的SDK,真的是又臭又长,代码结构不清晰,易读性差.后来VMware的同学给推荐了一款开源的SDK,一上手感觉工作效率提高了100倍!推荐大家使用~. 该SDK对VMwar ...

  6. 【wx:if】小程序条件渲染的使用说明

    语法,以view为例: <view xw:if="{{条件}}">aaaa</view> <view xw:elif="{{条件}}&quo ...

  7. POJ 1655 Balancing Act(求树的重心)

    Description Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. Deleting any nod ...

  8. Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

  9. python学习笔记06:操作文件

    调用内置的open函数打开文件,传递两个参数:文件路径(绝对路径或相对路径),打开模式('r':读,'r+':读写,'w':写,'b':二进制): f = open('data.txt','w') f ...

  10. Jrebel 工具学习

    Jrebel 可快速实现热部署,节省了大量重启时间,提高了个人开发效率.网上可搜索到破解版. http://baike.baidu.com/link?url=wuzv7Wa7SMUKltJr-dyta ...