解析

这题似乎是裸的平衡树\(+\)模拟...于是用\(treap\)写了个板子.

看上去,我们似乎要维护两颗树(宠物和顾客),

然而,注意到,同一时间宠物点只有一类人(或物qwq),

所以,只要判断当前宠物店和询问是否是一样,

根据题意模拟就行了.

另外,没有重复感觉比较舒服

上AC代码吧:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#define INF 0x7fffffff
#define Mod 1000000
using namespace std; inline int read(){
int sum=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9'){sum=sum*10+c-'0';c=getchar();}
return sum*f;
} struct tree{int l,r,val,dat;}t[1000001];
int n,root,tot=0,ans=0;
int ok,sum=0; inline int New(int val){
t[++tot].val=val;t[tot].dat=rand();
return tot;
} inline void build(){
New(-INF);New(INF);
root=1;t[1].r=2;
} inline void zig(int &p){
int q=t[p].l;
t[p].l=t[q].r;t[q].r=p;p=q;
} inline void zag(int &p){
int q=t[p].r;
t[p].r=t[q].l;t[q].l=p;p=q;
} void insert(int &p,int val){
if(!p){p=New(val);return ;}
insert(val<t[p].val? t[p].l:t[p].r,val);
if(t[t[p].l].dat>t[p].dat) zig(p);
if(t[t[p].r].dat>t[p].dat) zag(p);
} void remove(int &p,int val){
if(!p) return ;
if(t[p].val==val){
if(!t[p].l&&!t[p].r){p=0;return ;}
if(!t[p].r||t[t[p].l].dat>t[t[p].r].dat){
zig(p);remove(t[p].r,val);
}
else{
zag(p);remove(t[p].l,val);
}
}
remove(val<t[p].val? t[p].l:t[p].r,val);
} inline int getpre(int val){
int ans=1,p=root;
while(p){
if(t[p].val==val) return val;
if(t[p].val<val&&t[p].val>t[ans].val) ans=p;
p=val<t[p].val? t[p].l:t[p].r;
}
return t[ans].val;
} inline int getnext(int val){
int ans=2,p=root;
while(p){
if(t[p].val==val) return val;
if(t[p].val>val&&t[p].val<t[ans].val) ans=p;
p=val<t[p].val? t[p].l:t[p].r;
}
return t[ans].val;
} inline void find(int val){
int l=getpre(val),r=getnext(val);
if(l!=-INF&&val-l<=r-val){ans=(ans+val-l)%Mod;remove(root,l);sum--;}
else{ans=(ans+r-val)%Mod;remove(root,r);sum--;}
} int main(){
n=read();build();
for(int i=1;i<=n;i++){
int x=read(),y=read();
if(!sum){insert(root,y);sum++;ok=x;}//店里什么都没有
else if(x==ok){insert(root,y);sum++;}//询问和店里的一样
else find(y);//不一样,可以带走
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. HTTP协议与HTML表单(再谈GET与POST的区别)
  2. chrpath工具使用
  3. C++ stringstream介绍,使用方法与例子
  4. springmvc+mybatis如何分层
  5. codeforces 464C. Substitutes in Number
  6. Angular4.0.0发布总览文章
  7. 使用Git进行代码版本管理及协同工作
  8. php操作excel表格的导入和导出
  9. Gparted Live分区调整
  10. vi命令插入
  11. js控制全屏及退出全屏
  12. Unable to find vcvarsall.bat
  13. 实验1--用C语言编程四则运算
  14. 沉迷Link-Cut tree无法自拔之:[BZOJ2594][Wc2006]水管局长数据加强版
  15. QToolButton按钮
  16. Skflow mac安装 for tensorflow-0.8.0
  17. Codeforces Beta Round #9 (Div. 2 Only)
  18. AtCoder Grand Contest 002
  19. Linux命令-xargs
  20. time random sys 模块

热门文章

  1. [转帖]Docker学习之Dockerfile命令详解
  2. check_mysql.sh
  3. 利用PLSQL Developer对oracle中的数据进行备份恢复
  4. 脚本(bat、shell)调用conda
  5. sql server 中 like 中文不匹配问题解决就这么简单
  6. # [Poj 3107] Godfather 链式前向星+树的重心
  7. Jupyter修改默认文件保存路径
  8. 关于CPU的一些操作(CPU设置超频)
  9. parseInt()、Number()区别
  10. STM32WB 振荡器与时钟