[HAOI2008] 排名系统
题目链接:戳我
要注意因为数可能会对应很多人,但是输出的时候要按照添加的顺序输出。所以我们不能将相同值的节点合并,用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] 排名系统的更多相关文章
- 数据结构(Splay平衡树):HAOI2008 排名系统
[HAOI2008] 排名系统 [题目描述] 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录.当某个玩家上传自己最新的得分记录时,他原有的得分记录 ...
- bzoj 1056 [HAOI2008]排名系统(1862 [Zjoi2006]GameZ游戏排名系统)
1056: [HAOI2008]排名系统 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 502[Submit][Statu ...
- 【BZOJ1056】[HAOI2008]排名系统(Splay)
[BZOJ1056][HAOI2008]排名系统(Splay) 题面 BZOJ 洛谷 题解 \(Splay\)随便维护一下就好了,至于名字什么的,我懒得手写哈希表了,直接哈希之后拿\(map\)压. ...
- [HAOI2008]排名系统& [Zjoi2006]GameZ游戏排名系统
1056: [HAOI2008]排名系统 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2487 Solved: 711[Submit][Statu ...
- BZOJ_1862_[Zjoi2006]GameZ游戏排名系统&&BZOJ_1056_[HAOI2008]排名系统_Splay
BZOJ_1862_[Zjoi2006]GameZ游戏排名系统&&BZOJ_1056_[HAOI2008]排名系统_Splay Description 排名系统通常要应付三种请求:上传 ...
- 2021.12.07 P4291 [HAOI2008]排名系统(Treap)
2021.12.07 P4291 [HAOI2008]排名系统(Treap) https://www.luogu.com.cn/problem/P4291 双倍经验: https://www.luog ...
- 【BZOJ】1862: [Zjoi2006]GameZ游戏排名系统 & 1056: [HAOI2008]排名系统(treap+非常小心)
http://www.lydsy.com/JudgeOnline/problem.php?id=1862 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- 1056: [HAOI2008]排名系统 - BZOJ
Description 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录.当某个玩家上传自己最新的得分记录时,他原有的得分记录会被删除.为了减轻服务 ...
- P4291 [HAOI2008]排名系统
题目描述 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录.当某个玩家上传自己最新的得分记录时,他原有的得分记录会被删除.为了减轻服务器负担,在返回 ...
- COGS 197 [HAOI2008] 排名系统
★★★☆ 输入文件:rank.in 输出文件:rank.out 简单对比 时间限制:1 s 内存限制:128 MB [题目描述] 排名系统通常要应付三种请求:上传一条新的得分记录.查询 ...
随机推荐
- 使用crontab设置定时任务
配置文件 crontab主要的配置文件如下: /etc/crontab:系统cron表 /etc/cron.d/*:保存由软件包安装脚本创建的cron文件的目录 /var/spool/cron/*:保 ...
- android-tip-各种clock的使用
参考:http://developer.android.com/reference/android/os/SystemClock.html System.currentTimeMills() 这个函 ...
- 复杂链表的复制(java)
问题描述 时间输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点), 返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引 ...
- XSS的原理分析与解剖(第二篇)[转]
0×01 前言: 上节(http://www.freebuf.com/articles/web/40520.html)已经说明了xss的原理及不同环境的构造方法.本期来说说XSS的分类及挖掘方法. 当 ...
- 阿里云WindowsServer2012安装IIS失败
本文地址:http://www.cnblogs.com/drfxiaoliuzi/p/6388417.html 首先,向微软官方论坛的大神致敬: https://social.technet.micr ...
- CF 1097D Makoto and a Blackboard
算是记一下昨天晚上都想了些什么 官方题解 点我 简单题意 给定两个正整数$n$和$k$,定义一步操作为把当前的数字$n$等概率地变成$n$的任何一个约数,求$k$步操作后的期望数字,模$1e9 + ...
- [Training Video - 4] [Groovy] Initializing log inside class with constructor
TestService s = new TestService(log,context,testRunner) s.xyz() class TestService{ def log def conte ...
- [SoapUI] UrlEncode编码/UrlDecode解码网站
http://tool.chinaz.com/Tools/URLEncode.aspx 解码: 编码:
- SQL游标 数据库编程样例
--处理file与folder中的order -- 声明变量 DECLARE @fileid AS INT, @folderid AS INT, @order AS INT, @oldFolderId ...
- hbase java api样例(版本1.3.1,新API)
hbase版本:1.3.1 目的:HBase新API的使用方法. 尝试并验证了如下几种java api的使用方法. 1.创建表 2.创建表(预分区) 3.单条插入 4.批量插入 5.批量插入(客户端缓 ...