题目链接:1,2

treap恶心题,不多说

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define rre(i,r,l) for(int i=(r);i>=(l);i--)
#define re(i,l,r) for(int i=(l);i<=(r);i++)
#define Clear(a,b) memset(a,b,sizeof(a))
#define inout(x) printf("%d",(x))
#define douin(x) scanf("%lf",&x)
#define strin(x) scanf("%s",(x))
#define LLin(x) scanf("%lld",&x)
#define op operator
#define CSC main
typedef unsigned long long ULL;
typedef const int cint;
typedef long long LL;
using namespace std;
cint mod=;int n,root,sz,tot,head[mod+];
struct data1
{
int v,t,next;
char ch[];
}hash[];
struct data2
{
int l,r,v,s,rr,t;
char ch[];
}tp[];
void maintain(int k){tp[k].s=tp[tp[k].l].s+tp[tp[k].r].s+;}
void rotate2(int &k)
{
int t=tp[k].l;
tp[k].l=tp[t].r;
tp[t].r=k;tp[t].s=tp[k].s;
maintain(k);k=t;
}
void rotate1(int &k)
{
int t=tp[k].r;
tp[k].r=tp[t].l;
tp[t].l=k;
tp[t].s=tp[k].s;
maintain(k);k=t;
}
bool com(char *a,char *b)
{
for(int i=;i<(int)max(strlen(a),strlen(b));i++)
if(a[i]!=b[i])return ;
return ;
}
int HASH(char *ch)
{
int s=;
for(int i=;i<(int)strlen(ch);i++)
{
s*=;s+=(ch[i]-'A'+);
s%=mod;
}
return s;
}
void del(int &k,int x,int t)
{
if(tp[k].v==x)
{
if(tp[k].t==t)
{
if(tp[k].l*tp[k].r==)k=tp[k].l+tp[k].r;
else if(tp[tp[k].l].rr<tp[tp[k].r].rr){rotate2(k);del(k,x,t);}
else {rotate1(k);del(k,x,t);}
}
else if(t>tp[k].t){tp[k].s--;del(tp[k].l,x,t);}
else {tp[k].s--;del(tp[k].r,x,t);}
}
else if(x<tp[k].v){tp[k].s--;del(tp[k].l,x,t);}
else {tp[k].s--;del(tp[k].r,x,t);}
}
void add(int &k,char *ch,int x,int t)
{
if(k==)
{
sz++;k=sz;tp[k].v=x;tp[k].s=;tp[k].rr=rand();
memcpy(tp[k].ch,ch,strlen(ch));tp[k].t=t;
return;
}
tp[k].s++;
if(x<=tp[k].v){add(tp[k].l,ch,x,t);if(tp[tp[k].l].rr<tp[k].rr)rotate2(k);}
else{add(tp[k].r,ch,x,t);if(tp[tp[k].r].rr<tp[k].rr)rotate1(k);}
}
void add(char *ch,int x,int t)
{
int k=HASH(ch);int i=head[k];
while(i)
{
if(com(hash[i].ch,ch))
{
del(root,hash[i].v,hash[i].t);
hash[i].t=t;hash[i].v=x;
add(root,ch,x,t);
return;
}
i=hash[i].next;
}
tot++;
hash[tot].t=t;hash[tot].v=x;
memcpy(hash[tot].ch,ch,strlen(ch));
hash[tot].next=head[k];head[k]=tot;
add(root,ch,x,t);
}
int hh(char *ch)
{
int k=HASH(ch);int i=head[k];
while(i)
{
if(com(hash[i].ch,ch))return i;
i=hash[i].next;
}return ;
}
int findrank(int k,int x,int t)
{
if(k==)return ;
if(tp[k].v==x)
{
if(tp[k].t>t)return findrank(tp[k].r,x,t);
else if(tp[k].t<t)return +tp[tp[k].r].s+findrank(tp[k].l,x,t);
else return tp[tp[k].r].s+;
}
else if(tp[k].v<x)return findrank(tp[k].r,x,t);
else return +tp[tp[k].r].s+findrank(tp[k].l,x,t);
}
void query1(char *ch)
{
int t=hh(ch);
printf("%d\n",findrank(root,hash[t].v,hash[t].t));
}
int findwei(int k,int x)
{
if(tp[tp[k].r].s+==x)return k;
else if(x<=tp[tp[k].r].s)return findwei(tp[k].r,x);
else return findwei(tp[k].l,x-tp[tp[k].r].s-);
}
void query2(char *ch)
{
int s=;
for(int i=;i<(int)strlen(ch);i++){s*=;s+=ch[i]-'';}
for(int i=s;i<=tot&&i<=s+;i++)
{
printf("%s",tp[findwei(root,i)].ch+);
if(i<tot&&i<s+)printf(" ");
}
printf("\n");
}
int CSC()
{
scanf("%d",&n);char ch[];int x;
for(int i=;i<=n;i++)
{
scanf("%s",ch);
if(ch[]=='+'){scanf("%d",&x);add(ch,x,i);}
else if(ch[]>='A'&&ch[]<='Z')query1(ch);
else query2(ch);
}
return ;
}

bzoj1056/1862 [Zjoi2006]GameZ游戏排名系统的更多相关文章

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

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

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

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

  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. bzoj 1056 [HAOI2008]排名系统(1862 [Zjoi2006]GameZ游戏排名系统)

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

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

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

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

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

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

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

  8. bzoj1862: [Zjoi2006]GameZ游戏排名系统

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

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

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

随机推荐

  1. vue之单表输入绑定

    vue的核心:声明式的指令和数据的双向绑定. 那么声明式的指令,已经给大家介绍完了.接下来我们来研究一下什么是数据的双向绑定? 另外,大家一定要知道vue的设计模式:MVVM M是Model的简写,V ...

  2. vs附加调试 w3p进程没有名称

    解决: 把vs用管理员运行

  3. 在ubuntu下安装使用latex

    参考:https://www.cnblogs.com/longdouhzt/archive/2012/09/27/2706358.html https://jingyan.baidu.com/albu ...

  4. Shiro - 轻量级Java 安全框架

    Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证.授权.加密和会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务. 并且相对于其他安全框架,Shi ...

  5. https://pyobjc.readthedocs.io/en/latest/

    https://pyobjc.readthedocs.io/en/latest/ The PyObjC project aims to provide a bridge between the Pyt ...

  6. FW 构建OpenStack的高可用性(HA,High Availability)

    原文地址:http://blog.csdn.net/hilyoo/article/details/7704280 1.CAP理论 1) CAP 理论给出了3个基本要素: 一致性 ( Consisten ...

  7. msc文件

    MSC微软管理控制台(Microsoft Management Control)文件.可以点击开始/运行,然后输入下列文件名就可以打开相应的控制窗口. 除第三个文件外,其他均在C:\WINDOWS\s ...

  8. Linux替换字符串

    sed命令批量替换多个文件中的字符串: 命令:sed -i “s/原字符串/新字符串/g” `grep 原字符串 -rl 所在目录` 例如:我要把 xy 替换为 mn,执行命令: sed -i “s/ ...

  9. ubuntu16.4中安装samba服务

    一.下载samba软件包,不用安装其他的了,因为它会自动帮我们下载所需要的其他依赖包 sudo apt-get install samba 二.修改/etc/samba目录下的配置文件,smb.con ...

  10. 对nodejs的理解(一)

    1.介绍一下事件驱动编程---快餐店点餐. 在基于线程的方式中(thread-based way)你到了柜台前,把你的点餐单给收银员或者给收银员直接点餐,然后等在那直到你要的食物准备好给你.收银员不能 ...