博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HNOI2004]宠物收养场
阅读量:6823 次
发布时间:2019-06-26

本文共 1980 字,大约阅读时间需要 6 分钟。

fhq treap

开俩哨兵节点,然后插入、删除、前驱、后继,统计即可

#include"cstdio"#include"cstring"#include"iostream"#include"algorithm"#include"ctime"using namespace std;const int MAXN=8e4+5;const int MOD=1e6;int n,cnt,root,co;bool kd;long long ans;int siz[MAXN],sn[MAXN][2],rev[MAXN];long long val[MAXN];int cret(long long v){    siz[++cnt]=1;    val[cnt]=v;    rev[cnt]=rand();    return cnt;}int un(int x,int y){    if(!x||!y) return x|y;    if(rev[x]<=rev[y]){        sn[x][1]=un(sn[x][1],y);        siz[x]=siz[sn[x][0]]+siz[sn[x][1]]+1;        return x;    }sn[y][0]=un(x,sn[y][0]);    siz[y]=siz[sn[y][0]]+siz[sn[y][1]]+1;    return y;}void dro(int k,int v,int &x,int &y){    if(!k){x=y=0;return;}    if(val[k]<=v) x=k,dro(sn[k][1],v,sn[k][1],y);    else y=k,dro(sn[k][0],v,x,sn[k][0]);    siz[k]=siz[sn[k][0]]+siz[sn[k][1]]+1;    return;}int rnk(int k,int v){    if(sn[k][0]==k) return n+1;    if(v<=siz[sn[k][0]]) return rnk(sn[k][0],v);    if(v==siz[sn[k][0]]+1) return k;    return rnk(sn[k][1],v-siz[sn[k][0]]-1);}void ins(int v){    int x,y;    dro(root,val[v],x,y);    root=un(un(x,v),y);    return;}void del(int v){    int x,y,z,c;    dro(root,v,x,z),dro(x,v-1,x,y);c=y;    y=un(sn[y][0],sn[y][1]);sn[c][0]=sn[c][1]=val[c]=siz[c]=0;    root=un(un(x,y),z);    return;}void debug(){    for(int i=1;i<=siz[root];++i) printf("%d ",val[rnk(root,i)]);    puts("-");}int main(){    scanf("%d",&n);    int ct1=cret((long long)-1e10),ct2=cret((long long)1e10);    ins(ct1);ins(ct2);    while(n--){        int c,v;scanf("%d%d",&c,&v);        if(!co||kd==c){            kd=c;++co;            int ct=cret(v);            ins(ct);        }else{            int x,y;--co;            dro(root,v,x,y);            long long ct1=val[rnk(x,siz[x])],ct2=val[rnk(y,1)];            root=un(x,y);            if(abs(ct1-v)<=abs(ct2-v)) del(ct1),ans=(ans+abs(ct1-v))%MOD;            else del(ct2),ans=(ans+abs(ct2-v))%MOD;        }    }printf("%lld\n",ans);    return 0;}

转载于:https://www.cnblogs.com/AH2002/p/10083943.html

你可能感兴趣的文章
linux系统下MySQL表名区分大小写问题
查看>>
【.Net】net 反射15分钟速成
查看>>
[进程]kill 9和15,以及pkill, killall
查看>>
[C++基础]C++中静态成员函数如何访问非静态成员
查看>>
MST最小生成树及克鲁斯卡尔(Kruskal)算法
查看>>
HTTP Status 500 - Request processing failed; nested exception is java.lang.NullPointerException
查看>>
【翻译】MODELS - VIEWS – CONTROLLERS
查看>>
(转)hadoop 0.20.2在eclipse开发的插件问题
查看>>
poj 1037(经典dp)
查看>>
mac下两种很常见的button的xib设置
查看>>
ScrollView反弹效果 仿小米私密短信效果
查看>>
iOS边练边学--触摸事件以及能够拖拽的UIView的练习
查看>>
Redis命令拾遗五(有序集合)
查看>>
防止WordPress利用xmlrpc.php进行暴力破解以及DDoS
查看>>
Rafy 框架 - 使用 SqlTree 查询
查看>>
Python进阶 学习笔记(一)
查看>>
电梯测试点有哪些?
查看>>
如何点击UIWebView上html链接不弹出复制粘贴
查看>>
HDU 2709 Sumsets(递推)
查看>>
spring属性注入DI
查看>>