题目链接:戳我

要注意因为数可能会对应很多人,但是输出的时候要按照添加的顺序输出。所以我们不能将相同值的节点合并,用set维护。就算值相同也只能新开节点。

然后就没有什么了。。。懒得写哈希表。。直接上map了。。开了O2之后也不是很慢qwq

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#define ll long long
#define MAXN 6400010
#define ls (t[x].ch[0])
#define rs (t[x].ch[1])
using namespace std;
int rt,n,tot;
map<string,int> M;
string kkk,name[250010];
struct Node{int ch[2],ff,v,size;}t[MAXN]; void push_up(int x){t[x].size=t[ls].size+t[rs].size+1;} inline void rotate(int x)
{
int y=t[x].ff;
int z=t[y].ff;
int k=t[y].ch[1]==x;
t[z].ch[t[z].ch[1]==y]=x; t[x].ff=z;
t[y].ch[k]=t[x].ch[k^1]; t[t[x].ch[k^1]].ff=y;
t[x].ch[k^1]=y; t[y].ff=x;
push_up(y),push_up(x);
} void splay(int x,int goal)
{
while(t[x].ff!=goal)
{
int y=t[x].ff,z=t[y].ff;
if(z!=goal)
(t[y].ch[0]==x)^(t[z].ch[0]==y)?rotate(x):rotate(y);
rotate(x);
}
if(!goal)rt=x;
} void insert(int u,int id)
{
int x=rt;
for(;;)
{
if(!t[x].ch[u>t[x].v])
{
t[id].ff=x;t[id].v=u;t[id].size=1;
t[x].ch[u>t[x].v]=id;
splay(id,0);
break;
}
else x=t[x].ch[u>t[x].v];
}
} int _th(int K)
{
int x=rt;
for(;;)
{
if(t[ls].size+1==K) return x;
else if(t[ls].size>=K) x=ls;
else K-=t[ls].size+1,x=rs;
}
} void Del(int x)
{
splay(x,0);
int rk=t[ls].size;
int l=_th(rk),r=_th(rk+2);
splay(l,0);splay(r,l);t[r].ch[0]=0;
t[x].ff=t[x].size=t[x].v=0;
push_up(r);
push_up(l);
} void print(int x,int &sum)
{
if(!sum)return;
if(rs)print(rs,sum);
if(!sum)return;
if(x>2)
sum--,cout<<name[x]<<" ";
if(ls)print(ls,sum);
} int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%d",&n);
insert(-2147483647,++tot);insert(2147483647,++tot);
while(n--)
{
char op;
cin>>op;
cin>>kkk;
if(op=='+')
{
int sco,id;
scanf("%d",&sco);
if(M[kkk])id=M[kkk],Del(id),insert(sco,id);
else
{
insert(sco,M[kkk]=++tot);
name[tot]=kkk;
}
}
else if(kkk[0]>='0'&&kkk[0]<='9')
{
int rk=0,l=kkk.length();
for(int i=0;i<l;++i) rk=rk*10+kkk[i]-'0';
l=_th(tot-rk+1);
splay(l,0);
int sum=10;
print(t[l].ch[0],sum);puts("");
}
else
{
int x=M[kkk];splay(x,0);
printf("%d\n",t[rs].size);
}
if(n%200==0) splay(rand()%tot+1,0);
}
return 0;
}

这道题过一段时间之后还要重写。。。实在是奇葩qwq

[HAOI2008] 排名系统的更多相关文章

  1. 数据结构(Splay平衡树):HAOI2008 排名系统

    [HAOI2008] 排名系统 [题目描述] 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录.当某个玩家上传自己最新的得分记录时,他原有的得分记录 ...

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

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

  3. 【BZOJ1056】[HAOI2008]排名系统(Splay)

    [BZOJ1056][HAOI2008]排名系统(Splay) 题面 BZOJ 洛谷 题解 \(Splay\)随便维护一下就好了,至于名字什么的,我懒得手写哈希表了,直接哈希之后拿\(map\)压. ...

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

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

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

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

  6. 2021.12.07 P4291 [HAOI2008]排名系统(Treap)

    2021.12.07 P4291 [HAOI2008]排名系统(Treap) https://www.luogu.com.cn/problem/P4291 双倍经验: https://www.luog ...

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

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

  8. 1056: [HAOI2008]排名系统 - BZOJ

    Description 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录.当某个玩家上传自己最新的得分记录时,他原有的得分记录会被删除.为了减轻服务 ...

  9. P4291 [HAOI2008]排名系统

    题目描述 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录.当某个玩家上传自己最新的得分记录时,他原有的得分记录会被删除.为了减轻服务器负担,在返回 ...

  10. COGS 197 [HAOI2008] 排名系统

    ★★★☆   输入文件:rank.in   输出文件:rank.out   简单对比 时间限制:1 s   内存限制:128 MB [题目描述] 排名系统通常要应付三种请求:上传一条新的得分记录.查询 ...

随机推荐

  1. Java实现主线程等待子线程

    本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明: 1.使用Thread的join()方法,join()方法会阻塞主线程继续向下执行. 2.使用Java.util.concurrent中的C ...

  2. iOS学习之UITableView中Cell的操作

    接着iOS学习之Table View的简单使用 这篇,这里主要讲UITableView 中的Cell的操作,包括标记.移动.删除.插入. 为了简单快捷,直接从原来那篇的代码开始,代码下载地址:http ...

  3. spring MVC模式拦截所有入口方法的入参出参打印

    import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; im ...

  4. malloc realloc calloc free

    自上次发现自己对这几个C函数不熟悉,就打算抽空整理一下,也就现在吧.这几个函数都是跟堆内存打交道的,还有一个好玩的函数--alloca,它是跟栈内存打交道的,我想留在以后研究出好玩点的来,再专门为其写 ...

  5. 【bzoj3667】Rabin-Miller算法

    3667: Rabin-Miller算法 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1200  Solved: 363[Submit][Statu ...

  6. 前Forward / 延时Deferred

    本章节描述了延时光照的渲染路径的细节,如果想了解延迟光照技术,请查阅Deferred Lighting Approaches article. Deferred Lighting is renderi ...

  7. 心理学轨迹及AI基础理论读后感

    今天简单的看了下心理学轨迹及AI基础理论发现世界确实是那3%的人改变的,我等屁民还努力在红尘中争渡,下面简单记录下我刚看完的思路,算做个笔记给自己看.. 模型建立的最终结果可以解读所有的心理学现象,可 ...

  8. linux c MQTT客户端实现

    linux c MQTT客户端实现 摘自:https://www.jianshu.com/p/d309de966379 一.前言:mqtt协议是轻量级的消息订阅和发布(publish/subscrib ...

  9. 掌握zigbee网络里的相关的重要概论

    1.zigbee无线通信,需要高频的载波来提供发射效率,zigbee模块之间要可以正常的收发,必须把接收频率设置和发射模块的载波频率一致. 2.zigbee有27个载波可以进行通信,载波叫做信道(无线 ...

  10. zuluCryt cli howto

    1.解锁卷的命令. zuluCrypt-cli -o -d /dev/sdc1 -m blabla -e ro -f /home/keyFile zuluCrypt-cli -o -d /dev/sd ...