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;
}

最新文章

  1. 微信消息回复C#
  2. mybatis知识点
  3. JavaScript事件响应的基础语法总结
  4. Pascal Triangle
  5. springboot 整合spark-sql报错
  6. 第三章:Activity的生命周期
  7. Getting Started with Processing 第四章总结
  8. UmBasketella
  9. Arduino通过I2C(PCF8574T)驱动1602LCD
  10. 一个更好的C++序列化/反序列化库Kapok
  11. Java—关于String的分析
  12. ELK日志系统之通用应用程序日志接入方案
  13. mvc 分部视图(Partial)显示登陆前后变化以及Shared文件夹在解决方案资源管理器中没有显示的问题
  14. Failed to lookup view &#39;error&#39;
  15. Vue+WebPack游戏设计:自动背景贴图和游戏主循环的实现
  16. 复合词(Compound Words, UVa 10391)(stl set)
  17. [推荐]spring cloud 详解
  18. Python的异步编程[0] -&gt; 协程[0] -&gt; 协程和 async / await
  19. grails email 发送邮件插件
  20. pycharm的使用二

热门文章

  1. Flask从入门到精通之Flash消息
  2. Dockerfile数据管理
  3. Python小白学习之路(二十一)—【迭代器】
  4. Spring中AOP切面编程学习笔记
  5. php引用使用不恰当而产生问题的地方
  6. iOS开发证书与配置文件的使用
  7. POJ 2301
  8. ActiveMQ学习--002--Topic消息例子程序
  9. 【C#小知识】C#中一些易混淆概念总结(六)---------解析里氏替换原则,虚方法 分类: C# 2014-02-08 01:53 1826人阅读 评论(0) 收藏
  10. centos虚拟机网络配置--桥接模式