bzoj1056/1862 [Zjoi2006]GameZ游戏排名系统
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游戏排名系统的更多相关文章
- BZOJ 1862: [Zjoi2006]GameZ游戏排名系统 [treap hash]
1862: [Zjoi2006]GameZ游戏排名系统 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1318 Solved: 498[Submit][ ...
- 1056/1862. [ZJOI2006]GameZ游戏排名系统【平衡树-splay】
Description GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在世界上的排名.得分越高,排名就越靠前.当两个玩家的名次相同时 ...
- 【BZOJ】1862: [Zjoi2006]GameZ游戏排名系统 & 1056: [HAOI2008]排名系统(treap+非常小心)
http://www.lydsy.com/JudgeOnline/problem.php?id=1862 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- bzoj 1056 [HAOI2008]排名系统(1862 [Zjoi2006]GameZ游戏排名系统)
1056: [HAOI2008]排名系统 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 502[Submit][Statu ...
- bzoj1056: [HAOI2008]排名系统 && 1862: [Zjoi2006]GameZ游戏排名系统
hash 加上 平衡树(名次树). 这道题麻烦的地方就在于输入的是一个名字,所以需要hash. 这个hash用的是向后探查避免冲突,如果用类似前向星的方式避免冲突,比较难写,容易挂掉,但也速度快些. ...
- bzoj 1862: [Zjoi2006]GameZ游戏排名系统 & bzoj 1056: [HAOI2008]排名系统
傻叉了一晚上,把t打成x,然后这题神奇在于输出一段数,不足的不用输出,一开始我的是直接找没有后面就退,然后这样会格式错误囧……然后最后zj的还卡了下空间,于是不用string就过了……string毁一 ...
- BZOJ_1862_[Zjoi2006]GameZ游戏排名系统&&BZOJ_1056_[HAOI2008]排名系统_Splay
BZOJ_1862_[Zjoi2006]GameZ游戏排名系统&&BZOJ_1056_[HAOI2008]排名系统_Splay Description 排名系统通常要应付三种请求:上传 ...
- bzoj1862: [Zjoi2006]GameZ游戏排名系统
Description GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在世界上的排名.得分越高,排名就越靠前.当两个玩家的名次相同时 ...
- [ZJOI2006]GameZ游戏排名系统
Description GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在世界上的排名.得分越高,排名就越靠前.当两个玩家的名次相同时 ...
随机推荐
- js生成二维码以及点击下载二维码
js生成二维码 jquery.qrcode.js可以快速使用页面生成二维码.但改项目有两个小问题:1.不支持中文:2.不支持二维码中间生成图片. 支持中文的jquery-qrcode jquery.q ...
- POJ-1189 钉子和小球(动态规划)
钉子和小球 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7452 Accepted: 2262 Description 有一个 ...
- ZOJ 4029 - Now Loading!!! - [前缀和+二分]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4029 Time Limit: 1 Second Memory L ...
- HDU 2089 - 不要62 - [数位DP][入门题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...
- HDU - 5806 NanoApe Loves Sequence Ⅱ 想法题
http://acm.hdu.edu.cn/showproblem.php?pid=5806 题意:给你一个n元素序列,求第k大的数大于等于m的子序列的个数. 题解:题目要求很奇怪,很多头绪但写不出, ...
- hadoop完全分布式安装部署-笔记
规划: [hadoop@db01 ~]$ cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4 ...
- w_scripting_language
https://en.wikipedia.org/wiki/Scripting_language A scripting or script language is a programming lan ...
- HTML_css选择器
第二种增加css样式的方法,可以在head中增加style标签,style中通过选择器定位标签增加css样式 CSS选择器分为六种: 1.id选择器 2.class选择器 3.标签选择器 4. ...
- Shell初学(三)传参
一. 脚本代码:test.sh echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1&quo ...
- literallycanvas的简介
LiterallyCanvas是什么 Literally Canvas是一个可扩展的开源(BSD许可)HTML5绘图组件,可以用于网页中插入画图板,类似于windows自带的画图板.可以用可视化工具绘 ...