解题:ZJOI 2006 游戏排名系统
跟i207M学了学重载运算符后找前驱后继,然后就是练练无旋树堆
#include<map>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=;
struct a
{
int id;
long long sc;
string username;
}dat[N];
bool operator < (a a1,a a2)
{
return (a1.sc==a2.sc)?a1.id<a2.id:a1.sc>a2.sc;
}
int siz[N],son[N][],rnk[N];
int n,x,y,z,t1,t2,tot,cnt,tim,root;
map<string,a> mp; string rd;
void Pushup(int nde)
{
siz[nde]=siz[son[nde][]]+siz[son[nde][]]+;
}
int Create(a tsk)
{
siz[++tot]=;
dat[tot]=tsk;
rnk[tot]=rand();
return tot;
}
int Merge(int x,int y)
{
if(!x||!y)
return x+y;
else if(rnk[x]<=rnk[y])
{
son[x][]=Merge(son[x][],y);
Pushup(x); return x;
}
else
{
son[y][]=Merge(x,son[y][]);
Pushup(y); return y;
}
}
void Split(int nde,int &x,int &y,a tsk)
{
if(!nde) x=y=;
else
{
if(dat[nde]<tsk)
x=nde,Split(son[nde][],son[nde][],y,tsk);
else
y=nde,Split(son[nde][],x,son[nde][],tsk);
Pushup(nde);
}
}
int Query(int nde,int tsk)
{
if(tsk<=siz[son[nde][]]) return Query(son[nde][],tsk);
else if(tsk==siz[son[nde][]]+) return nde;
else return Query(son[nde][],tsk-siz[son[nde][]]-);
}
void Insert(a tsk)
{
Split(root,x,y,tsk);
root=Merge(Merge(x,Create(tsk)),y);
}
void Delete(a tsk)
{
Split(root,x,y,tsk); tsk.id++;
Split(y,y,z,tsk); root=Merge(x,z);
}
int rnk_query(a tsk)
{
Split(root,x,y,tsk);
int ret=siz[x]+;
root=Merge(x,y); return ret;
}
string num_query(int tsk)
{
return dat[Query(root,tsk)].username;
}
int main()
{
cin>>n;
for(int i=;i<=n;i++)
{
cin>>rd;
if(rd[]=='+')
{
long long sc; cin>>sc;
rd.erase(rd.begin()),cnt++;
if(mp.count(rd)) Delete(mp[rd]),cnt--;
Insert(mp[rd]=(a){++tim,sc,rd});
}
else
{
if(isdigit(rd[]))
{
int q=;
for(int j=;j<(int)rd.size();j++)
q=q*+rd[j]-'';
for(int j=q,c=;j<=cnt&&c<=;j++,c++)
cout<<num_query(j)<<' '; cout<<endl;
}
else
{
rd.erase(rd.begin());
cout<<rnk_query(mp[rd])<<endl;
}
}
}
return ;
}
解题:ZJOI 2006 游戏排名系统的更多相关文章
- BZOJ 1862: [Zjoi2006]GameZ游戏排名系统 [treap hash]
1862: [Zjoi2006]GameZ游戏排名系统 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1318 Solved: 498[Submit][ ...
- 【洛谷P2584】【ZJOI2006】GameZ游戏排名系统题解
[洛谷P2584][ZJOI2006]GameZ游戏排名系统题解 题目链接 题意: GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在 ...
- 【BZOJ1862】[ZJOI2006]游戏排名系统 (Splay)
[BZOJ1862][ZJOI2006]游戏排名系统 (Splay) 题面 BZOJ 洛谷 题解 双倍经验题
- BZOJ_1862_[Zjoi2006]GameZ游戏排名系统&&BZOJ_1056_[HAOI2008]排名系统_Splay
BZOJ_1862_[Zjoi2006]GameZ游戏排名系统&&BZOJ_1056_[HAOI2008]排名系统_Splay Description 排名系统通常要应付三种请求:上传 ...
- GameZ游戏排名系统
GameZ游戏排名系统 GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在世界上的排名.得分越高,排名就越靠前.当两个玩家的名次相同时 ...
- 1056/1862. [ZJOI2006]GameZ游戏排名系统【平衡树-splay】
Description GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在世界上的排名.得分越高,排名就越靠前.当两个玩家的名次相同时 ...
- bzoj1862: [Zjoi2006]GameZ游戏排名系统
Description GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在世界上的排名.得分越高,排名就越靠前.当两个玩家的名次相同时 ...
- [ZJOI2006]GameZ游戏排名系统
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 ...
随机推荐
- Python和Pycharm的安装
目录 安装Python 安装Pycharm IDE 破解Pycharm 用Pycharm创建Python工程 安装Python 去Python官网下载Python软件,网址:https://www.p ...
- Android 自动化测试及性能数据采集的 Python 脚本
文主要介绍一个基于 uiautomator2 封装的一个 Python 库 android-catcher ,该库的功能主要有对 Android 设备进行 UI 自动化测试 和 采集手机性能数据 ,适 ...
- Python中abs()和math.fabs()区别
描述:Python中fabs(x)方法返回x的绝对值.虽然类似于abs()函数,但是两个函数之间存在以下差异: abs()是一个内置函数,而fabs()在math模块中定义的. fabs()函数只适用 ...
- [转]git命令之git remote的用法
git remote git remote -v git init git add xxx git commit -m 'xxx' git remote add origin ssh://softw ...
- 小白初识 - 计数排序(CountingSort)
计数排序,属于桶排序特殊的一种. 当要排序n个数据的时候,如果所处的范围不大,我们可以取其中的最大值K,并将数据分散在K个桶里面, 每个桶里面的数据都是相同的(这样省去了桶内排序的时间),然后顺序取出 ...
- KETTLE设置变量
一.kettle变量类型 kettle变量分为: 1.环境变量 通过 set variables组件设置变量,范围可以是:JVM变量.作业变量.父作业变量.根作业变量.使用时通过${var}或 %%v ...
- 移动端rem用法总结
先介绍一下这个近年来突起的黑马 CSS3中新增的属性,从IE9开始兼容,手机端都兼容.参考的是<html>这个标签的font-size.rem中的r就是root根的意思.所以rem要比em ...
- KNN算法之图像处理一
KNN: 1.数据挖掘分类技术中最简单的方法之一. 2.也称为邻近算法,K最近邻分类算法 3.每个样本都可以用它最接近的k个邻居来代表 4.一般,距离使用欧式距离或曼哈顿距离(通常,k≤20) pyt ...
- 02-JAVA 初始化
构造器 概念:在创建对象时被自动调用的方法,构造器采用和类名一样的名称 创建对象时,会为其分配存储空间,并调用相应的构造器进行初始化.这就确保了在操作对象之前,这个对象已经被恰当的初始化了. 不接受仁 ...
- mininet实验 可视化界面形成拓扑
参考博客一 参考博客二 实验目的 mininet中内置了一个mininet可视化工具:miniedit.miniedit在mininet/mininet/examples目录下提供miniedit.p ...