传送门

\(\color{green}{solution}\)

\(fhq \_treap\)模板题.
对于 \(+\) 操作,如果当前人不存在,那么直接加入;如果存在,那么先将他删除,再加入.复杂度\(O(n \log n)\)
对于 \(?\) 操作,如果问人,直接查找名次;如果问名次,先将它前面的\(split\)出去,再把它后面\(10\)个\(split\)
出去,然后输出即可.复杂度均为\(O(n \log n)\).
所以总复杂度是\(O(n \log n)\) 的.具体细节请参见代码.

#include <bits/stdc++.h>
using namespace std;

#define pii pair<int, int>
#define mp make_pair

const int maxn = 250010;

bool operator < (const pii &a, const pii &b) {
    return a.first == b.first ? a.second < b.second : a.first > b.first;
}

struct node {node *ls, *rs; pii a; int sz, ky, id;};
node *root, pool[maxn], *pis = pool, *nul, *Bc[maxn];
int bc_top;
inline void init() {
    nul = pis; nul->ls = nul->rs = nul; nul->sz = 0; root = nul;
}
node *newnode(int val, int tim, int opt) {
    node *k = bc_top ? Bc[bc_top --] : ++ pis;
    k->ls = k->rs = nul; k->sz = 1; k->ky = rand(); k->id = opt;
    k->a = mp(val, tim); return k;
}
inline void up(node *&x) { x->sz = x->ls->sz + x->rs->sz + 1;}
inline void mrg(node *&c, node *x, node *y) {
    if( x == nul || y == nul) {c = x == nul ? y : x; return;}
    if( x->ky < y->ky) c = x, mrg(c->rs, x->rs, y);
    else c = y, mrg(c->ls, x, y->ls); up(c);
}
inline void spl(node *c, node *&x, node *&y, int ret) {
    if( c == nul) { x = y = nul; return;}
    if( c->ls->sz+1 <= ret) x = c, spl(c->rs, x->rs, y, ret-c->ls->sz-1);
    else y = c, spl(c->ls, x, y->ls, ret); up(c);
}
int find(node *c, pii x) {
    if( c->a == x) return c->ls->sz + 1;
    if( c->a < x) return c->ls->sz + 1 + find(c->rs, x);
    return find(c->ls, x);
}
inline void erase(pii val) {
    int rk = find(root, val);
    node *x, *y, *z; spl(root, x, y, rk); spl(x, x, z, rk-1);
    mrg(root, x, y); Bc[++ bc_top] = z;
}
inline void sp_spl(node *c, node *&x, node *&y, int ret) {
    if( c == nul) { x = y = nul; return;}
    if( c->a.first >= ret) x = c, sp_spl(c->rs, x->rs, y, ret);
    else y = c, sp_spl(c->ls, x, y->ls, ret); up(c);
}
pii Rank[maxn];
int Idc;
inline void insert(int val, int tim, int &id) {
    if( id) erase(Rank[id]); else id = ++ Idc;
    node *x, *y; Rank[id] = mp(val, tim);
    sp_spl(root, x, y, val);
    mrg(x, x, newnode(val, tim, id)); mrg(root, x, y);
}
map<string, int> Id;
char buf[maxn][20], ss[20], *tt;
int getnum(char *s) {
    int x = 0; for ( ; !isdigit(*s); ++ s);
    for ( ; isdigit(*s); ++ s) x = (x << 1) + (x << 3) + (*s & 15);
    return x;
}
inline void out(node *x) {
    if(x == nul) return; out(x->ls); printf("%s ", buf[x->id]); out(x->rs);
}
int n;
inline void sol1(int rk) {
    node *x, *y, *z;
    spl(root, x, y, rk-1); spl(y, z, y, 10);
    out(z); puts("");
    mrg(y, z, y); mrg(root, x, y);
}

int main() {
#ifndef ONLINE_JUDGE
//  freopen("1.in","r",stdin);
#endif
    init();
    scanf("%d", &n);
    for ( register int i = 1, x; i <= n; ++ i) {
        scanf("%s", ss); tt = ss;
        if( *ss == '+') {
            ++ tt; scanf("%d", &x); insert(x, i, Id[tt]);
            int k = Id[tt];
            if( k == Idc) memcpy(buf[k], tt, sizeof(buf[k]));
        }
        else {
            ++ tt;
            if( isdigit(*tt)) sol1(getnum(tt));
            else printf("%d\n", find(root, Rank[Id[tt]]));
        }
    }
    return 0;
}

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

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

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

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

    傻叉了一晚上,把t打成x,然后这题神奇在于输出一段数,不足的不用输出,一开始我的是直接找没有后面就退,然后这样会格式错误囧……然后最后zj的还卡了下空间,于是不用string就过了……string毁一 ...

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

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

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

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

  5. bzoj 1862/1056 [HAOI2008]排名系统

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1862 很恶心的 一道题,我也不晓得自己是第几次写这题了%>_<%. 写了两种方 ...

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

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

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

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

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

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

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

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

随机推荐

  1. DART: a fast and accurate RNA-seq mapper with a partitioning strategy DART:使用分区策略的快速准确的RNA-seq映射器

    DART: a fast and accurate RNA-seq mapper with a partitioning strategyDART:使用分区策略的快速准确的RNA-seq映射器 Abs ...

  2. [Selenium]点击下拉框之后,从下拉列表选择元素进行点击很容易失败

    点击下拉框之后,下拉列表会显示出来,但是有时候下拉列表会很快就消失掉,导致后面选择元素的时候会失败. 像这种情况,需要将鼠标移动到下拉列表上,使下拉列表维持显示,然后才选择元素进行点击. 将鼠标移动到 ...

  3. 想成为一名成功的UX设计师吗?做好这13件事情吧

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 丢掉那些阻碍你前进的东西 每个人对成功的定义都不同.如果想在重要事情上取得成功,学会给予才是关键.只 ...

  4. JavaScript 对象属性作实参以及实参对象的callee属性

    参考自<<JavaScript权威指南 第6版>> /* * 将对象属性用作实参, 从而不必记住参数的顺序. */ function arraycopy(from,from_s ...

  5. sublime主题选择

    Sublime Text是一个强大的令人难以置信的编辑器. 它不仅具有大量的功能,而且还有很多主题,让他看起来很漂亮. 我们以前整理过 2014年的最好的主题 ; 让我们看看最新的Sublime Te ...

  6. loadrunner - 问题汇总及解决方案(持续更新)

    1.在此界面点击Run Load Tests提示: ”Can not save the license information because access to the registry is de ...

  7. Linux 基础教程 34-软件包管理-RPM

        对于Linux而言管理各类软件,如安装.卸载和升级等是常有的事情和必备的技能.以CentOS为例,常用的安装包命令有rpm和yum. RPM基础     RPM(RedHat Package ...

  8. HRBUST1200 装修 2017-03-06 15:41 94人阅读 评论(0) 收藏

    装修 hero为了能顺利娶princess ,花了血本,买了个房子,现在决定装修.房子的长度为n米,宽度为3米,现在我们有2种地砖,规格分别是1米×1米,2米×2米,如果要为该教室铺设地砖,请问有几种 ...

  9. postman的使用方法详解!最全面的教程

      文章来源:http://www.cnplugins.com/tool/specify-postman-methods.html     一 简介 Postman 是一款功能超级强大的用于发送 HT ...

  10. Java下的框架编程(反射,泛型,元数据,CGLib,代码动态生成,AOP,动态语言嵌入)

    Java 虽然没有动态语言般暴起,但仍然天连天,水接水的生出好多框架技术---反射(reflection),泛型(generics),元数据(annotation),proxies(proxy/cgl ...