HAOI2008 排名系统

P4291 [HAOI2008] 排名系统

题目大意

有一个排名系统和 n n n次操作,操作分为以下三种:

  • +Name Score:上传一条新的得分记录
  • ?Name:查询某个玩家的当前排名
  • ?Index:返回某个区段内的排名记录

当某个玩家上传自己最新的得分记录时,他原有的得分记录会被删除。为了减轻服务器负担,在返回某个区段内的排名记录时,最多返回10条记录。

10 ≤ n ≤ 250000 10\leq n\leq 250000 10n250000


题解

前置知识:Splay平衡树

用平衡树维护分数,然后在平衡树上加点、删点、一个数的排名和排名为 k k k的名字。可以用 m a p map map将名字和分数一一对应。

不过,我们发现可能会有几个人的分数相同,我们考虑如何解决。我们发现人数不会超过 1 0 6 + 1 10^6+1 106+1,那么我们可以将每个人的分数 w w w变为 w ∗ ( 1 0 6 + 1 ) + k w*(10^6+1)+k w(106+1)+k,其中 k k k是一个随着操作次数的增加二减少的数,这就解决了分数相同的问题。

code

#include<bits/stdc++.h>
using namespace std;
const int N=500000;
int T,s1,nt;
int rt,tot,cnt[N+5],siz[N+5],fa[N+5],ch[N+5][2];
long long mt[N+5];
char s[105];
string nm[N+5];
map<string,int>mp;
struct node{long long v;int wt;bool operator<(const node ax)const{return v<ax.v;}bool operator>(const node ax)const{return v>ax.v;}bool operator!=(const node ax)const{return v!=ax.v;}
}v[N+5];
int gt(int x){return ch[fa[x]][1]==x;
}
void pt(int x){siz[x]=1+siz[ch[x][0]]+siz[ch[x][1]];
}
void rot(int x){int y=fa[x],z=fa[y],k=gt(x);ch[z][gt(y)]=x;fa[x]=z;ch[y][k]=ch[x][!k];fa[ch[y][k]]=y;ch[x][!k]=y;fa[y]=x;pt(y);pt(x);
}
void splay(int x,int g=0){for(int y;fa[x]!=g;rot(x)){y=fa[x];if(fa[y]!=g) rot((gt(y)==gt(x))?y:x);}if(!g) rt=x;
}
void find(long long x){if(!rt) return;int u=rt;while(ch[u][(node){x,0}>v[u]]&&(node){x,0}!=v[u]) u=ch[u][(node){x,0}>v[u]];splay(u);
}
void insert(long long x,int wt){int u=rt,fu=0;while(u&&v[u]!=(node){x,0}){fu=u;u=ch[u][(node){x,0}>v[u]];}u=++tot;if(fu) ch[fu][(node){x,0}>v[fu]]=u;fa[u]=fu;v[u]=(node){x,wt};siz[u]=1;splay(u);
}
int nxt(long long x,int f){find(x);int u=rt;if(v[u]>(node){x,0}&&f) return u;if(v[u]<(node){x,0}&&!f) return u;u=ch[u][f];while(ch[u][!f]) u=ch[u][!f];return u;
}
void dele(long long x){int lt=nxt(x,0),rt=nxt(x,1);splay(lt);splay(rt,lt);ch[rt][0]=0;
}
int kth(int k){int u=rt,sn=0;for(;;){sn=ch[u][0];if(k>siz[sn]+1) k-=siz[sn]+1,u=ch[u][1];else if(siz[sn]>=k) u=sn;else{splay(u);return v[u].wt;}}
}
int main()
{insert(1e18,0);insert(-1e18,0);scanf("%d",&T);while(T--){scanf("%s",s);s1=strlen(s);int tp=0;string t;long long w;if(s[0]=='+'){for(int i=1;i<s1;i++) t=t+s[i];scanf("%lld",&w);w=w*(N+1)+T;if(mp.count(t)){dele(mt[mp[t]]);}else{nm[++nt]=t;mp[t]=nt;}mt[mp[t]]=w;insert(w,mp[t]);}else if(s[1]<'0'||s[1]>'9'){for(int i=1;i<s1;i++) t=t+s[i];find(mt[mp[t]]);int tmp=siz[ch[rt][0]]+(v[rt]<(node){mt[mp[t]],0});printf("%d\n",nt-tmp+1);}else{for(int i=1;i<s1;i++) tp=tp*10+s[i]-'0';tp=nt-tp+1;for(int i=tp;i>=max(tp-10+1,1);i--){cout<<nm[kth(i+1)]<<" ";}printf("\n");}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/638226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源项目盘点-学习类

1&#xff0c;freeCodeCamp 地址&#xff1a;https://github.com/freeCodeCamp/freeCodeCamp 描述&#xff1a;一个程序员学习网站&#xff0c;里面有全栈开发、机器学习的相关知识&#xff0c;是完全免费的&#xff0c;该网站有上千道编码挑战题来帮助你来练习你的技能。 提…

ajax的优缺点?

AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种使用异步请求来更新网页的技术&#xff0c;它可以在不重新加载整个页面的情况下&#xff0c;通过与服务器交换数据来更新部分网页内容。以下是AJAX的主要优点和缺点&#xff1a; 优点&#xff1a; 提升用户…

Linux———groupadd,groupdel,groupmod命令联合总结(狠狠爱住)

目录 groupadd 命令 groupadd 命令基本语法&#xff1a; groupadd 命令常用选项&#xff1a; 下面是一些示例来演示如何使用 groupadd 命令&#xff1a; groupdel 命令&#xff1a; groupdel 命令基本语法&#xff1a; groupdel 命令常用的选项有&#xff1a; 下面是一…

样本处理之SMOTE算法

1. 少数类别过采样技术SMOTE简介 Synthetic Minority Oversampling Technique&#xff0c;是一种用于合成少数类样本的过采样技术&#xff0c;通过对训练集中的正例进行插值来产生额外的正例。 基本思想&#xff1a; 对少数类样本进行分析&#xff0c;然后在现有少数类样本之间…

AI对比:ChatGPT与文心一言的异同与未来

文章目录 &#x1f4d1;前言一、ChatGPT和文心一言概述1.1 ChatGPT1.2 文心一言 二、ChatGPT和文心一言比较2.1 训练数据与知识储备2.2 语义理解与生成能力2.2 应用场景与商业化探索 三、未来展望3.1 模型规模与参数数量不断增加3.2 多模态交互成为主流3.3 知识图谱与大模型的结…

大数据平台的硬件规划、网络调优、架构设计、节点规划

1.大数据平台硬件选型 要对Hadoop大数据平台进行硬件选型,首先需要了解Hadoop的运行架构以及每个角色的功能。在一个典型的Hadoop架构中,通常有5个角色,分别是NameNode、Standby NameNode、ResourceManager、NodeManager、DataNode以及外围机。 其中 NameNode 负责协调集群…

每周AI新闻(2024年第3周)Meta研发Llama 3 | 苹果Vision Pro预售 | 智谱AI发布GLM-4

我是陌小北&#xff0c;一个正在研究硅基生命的、有趣儿的碳基生命。每周日20:00&#xff0c;准时解读每周AI大事件。 大厂动向 【1】Meta研发Llama 3&#xff0c;构建开源AGI Meta公司CEO马克扎克伯格&#xff08;Mark Zuckerberg&#xff09;宣布公司将对两个关键AI研究部…

客户需求,就是项目管理中最难管的事情

对于需求控制和管理 个人的观点是&#xff1a;首先要向客户传递开发流程&#xff0c;第二必须制作原型&#xff0c;需求确认时确认的是原型&#xff0c;而不是需求文档&#xff0c;第三&#xff0c;开发阶段要快速迭代&#xff0c;与客户互动。管人方面我想对于项目经理来讲&am…

【51单片机】

0、前言 参考&#xff1a;普中 51 单片机开发攻略 第14章 1、硬件 ULN2003 芯片 2、软件 mian.c #include <reg52.h> #include <intrins.h> #include "delayms.h"typedef unsigned char u8; typedef unsigned int u16;sbit DC_MotorP1^0;void DC_Mo…

Ubuntu 使用 git 能够 clone 但不能 push 的参考解决方法

写在前面 自己的测试环境&#xff1a;Ubuntu20.04 下面的操作都是和 git 有关&#xff0c;所以针对不同的操作系统&#xff08;比如 Windows&#xff09;也是一样的。 一、问题描述 在此之前使用git执行 git push origin master 的命令时&#xff0c;能够正常执行&#xff0…

【计算机网络】【Python】【练习题】【新加坡南洋理工大学】【Computer Control Network】

一、题目描述 该题目描述一个网络中数据包交换&#xff08;Packet Switching&#xff09;的例子。题目如下&#xff1a; 二、问题解答&#xff08;使用Python&#xff09; Q1&#xff1a;如何求出0.0004这个值&#xff1f; &#xff08;1&#xff09;、公式推导过程&#xf…

数据库防水坝是什么?有什么作用?有哪些优势?

数据库是公司重要IT资产&#xff0c;是公司数据存储、数据整合、数据备份等重要载体。所以保障数据库安全至关重要。目前保障数据库安全产品较多&#xff0c;例如堡垒机、防火墙、数据库防水坝等等。今天我们就先来简单了解一下数据库防水坝是什么&#xff1f;有什么作用&#…

CMU15-445-Spring-2023-分布式DBMS初探(lec21-24)

Lecture #21_ Introduction to Distributed Databases Distributed DBMSs 分布式 DBMS 将单个逻辑数据库划分为多个物理资源。应用程序&#xff08;通常&#xff09;并不知道数据被分割在不同的硬件上。系统依靠单节点 DBMS 的技术和算法来支持分布式环境中的事务处理和查询执…

Scikit-Learn 中级教程——特征缩放

Python Scikit-Learn 中级教程&#xff1a;特征缩放 在机器学习中&#xff0c;特征缩放是一个重要的预处理步骤。它用于调整数据中特征的范围&#xff0c;以便模型能够更好地收敛和表现。在本篇博客中&#xff0c;我们将深入介绍 Scikit-Learn 中的特征缩放方法&#xff0c;并…

DAG最小路径点覆盖,最小路径可重复覆盖,详解

文章目录 前言有向无环图的最小路径点覆盖概念拆点二分图定理**证明** 最小路径可重复覆盖解决策略代码实现 OJ练习 前言 关于二分图&#xff1a;二分图及染色法判定 关于二分图最大匹配&#xff1a;二分图最大匹配——匈牙利算法详解 关于二分图带权最大完备匹配&#xff1…

k8s节点RouteCreated为false

出现该情况后&#xff0c;一般是初始化节点失败。因此&#xff0c;需要把节点从集群中移除&#xff0c;再加入到集群中&#xff0c;即可解决。 通常出现这个状况后&#xff0c;该节点上是没有被分配pod ip的&#xff0c;可以通过命令查看&#xff1a; # 发现没有PodCIDR、PodC…

【flutter】完全自定义样式模态对话框

示例完成结果展示&#xff1a; 示例组件代码&#xff1a; context&#xff1a;上下文 title&#xff1a;提示标题&#xff0c;null时不显示 content&#xff1a;提示内容&#xff0c;null时不显示 cancelText&#xff1a;取消按钮文字&#xff0c;null时不显示取消按钮 confirm…

GPT应用_PrivateGPT

项目地址&#xff1a;https://github.com/imartinez/privateGPT 1 功能 1.1 整体功能&#xff0c;想解决什么问题 搭建完整的 RAG 系统&#xff0c;与 FastGPT 相比&#xff0c;界面比较简单。但是底层支持比较丰富&#xff0c;可用于知识库的完全本地部署&#xff0c;包含大…

2024年【金属非金属矿山(地下矿山)安全管理人员】证考试及金属非金属矿山(地下矿山)安全管理人员模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员】证考试及金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员模拟考试题库&#xff0c;包含金属非金属矿山&#xff08;地下矿山&…

常用的正则表达式1

1.Email地址&#xff1a;^\w([-.]\w)\w([-.]\w).\w([-.]\w)*$ 2.域名&#xff1a;[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})/.? 3.电话号码 /^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/ 以1开头&#xff0c;3可跟任一数字&#…