刷题集--GameZ游戏排名系统

题意:GameZ为他们最新推出的游戏开通了一个网站。世界各地的玩家都可以将自己的游戏得分上传到网站上。这样就可以看到自己在世界上的排名。得分越高,排名就越靠前。当两个玩家的名次相同时,先上传记录者优先。由于新游戏的火爆,网站服务器已经难堪重负。为此GameZ雇用了你来帮他们重新开发一套新的核心。
排名系统通常要应付三种请求:上传一条新的得分记录、查询某个玩家的当前排名以及返回某个区段内的排名记录。当某个玩家上传自己最新的得分记录时,他原有的得分记录会被删除。为了减轻服务器负担,在返回某个区段内的排名记录时,最多返回10条记录。

也是一棵无旋treap就秒的。。

#pragma GCC optimize(3,"inline","Ofast")
#include
using namespace std;
mapname;
struct gg{
    int w,ls,rs,rnd,fa,sz;
}node[250010];
int tot=0,root;bool vis[250010];
char idx[250010][15],s[15];
int get_name()
{
    int n=strlen(s);string nw="";
    for(int i=0;i=k)y=nw,split1(node[nw].ls,k,x,node[nw].ls);
        else x=nw,split1(node[nw].rs,k-node[node[nw].ls].sz-1,node[nw].rs,y);
        push_up(nw);
    }
}
void split2(int nw,int k,int &x,int &y)
{
    if(!nw)x=y=0;
    else
    {
        if(node[nw].w>=k)x=nw,split2(node[nw].rs,k,node[nw].rs,y);
        else y=nw,split2(node[nw].ls,k,x,node[nw].ls);
        push_up(nw);
    }
}
int rnk(int x)
{
    int res=0;
    res+=node[node[x].ls].sz;
    while(node[x].fa!=0)
    {
        if(node[node[x].fa].rs==x)x=node[x].fa,res+=node[node[x].ls].sz+1;
        else x=node[x].fa;
    }
    return res;
}
void cg(int ps,int w)
{
    //cout<='0'&&s[0]<='9')nw=get_int(),ask(nw);
            else
            {
                who=get_name();
                query(who);
            }
        }
    }
}

 

你可能感兴趣的:(刷题集)