有一个点超时,确实是个很简单的splay
#include<cstdio>
#include<iostream>
using namespace std;
int n,shu[1000006][2],root,size,b1,b2,sum1,sum[1000005],zhi[1000005];
int fa[1000005];
void xuan(int a1)
{
int a2,a3,l,r;
a2=fa[a1];
a3=fa[a2];
if(a2==root)
root=a1;
else
if(a2==shu[a3][0])
shu[a3][0]=a1;
else
shu[a3][1]=a1;
if(shu[a2][0]==a1)
l=0;
else
l=1;
r=l^1;
fa[a1]=a3;
fa[a2]=a1;
shu[a2][l]=shu[a1][r];
shu[a1][r]=a2;
fa[shu[a2][l]]=a2;
return;
}
void zhuan(int a1)
{
int a2,a3;
for(;a1!=root;)
{
a2=fa[a1];
a3=fa[a2];
if(a2!=root)
if(a2==shu[a3][0]^a1==shu[a2][0])
xuan(a1);
else
xuan(a2);
xuan(a1);
}
}
void jia(int &a1,int a2,int a3)
{
if(a1==0)
{
size++;
a1=size;
zhi[a1]=a2;
sum[a1]=1;
fa[a1]=a3;
zhuan(a1);
return;
}
if(zhi[a1]==a2)
sum[a1]++;
else
if(zhi[a1]<a2)
jia(shu[a1][1],a2,a1);
else
jia(shu[a1][0],a2,a1);
return;
}
void qian(int a1,int a2)
{
if(a1==0)
return;
if(zhi[a1]==a2)
b1=a2;
else
if(zhi[a1]<a2)
{
b1=zhi[a1];
qian(shu[a1][1],a2);
}
else
qian(shu[a1][0],a2);
return;
}
void hou(int a1,int a2)
{
if(a1==0)
return;
if(zhi[a1]==a2)
b2=a2;
else
if(zhi[a1]>a2)
{
b2=zhi[a1];
hou(shu[a1][0],a2);
}
else
hou(shu[a1][1],a2);
return;
}
int main()
{
scanf("%d",&n);
scanf("%d",&sum1);
jia(root,sum1,0);
for(int i=1;i<n;i++)
{
int a1;
scanf("%d",&a1);
b1=-1;
b2=-1;
qian(root,a1);
hou(root,a1);
if(b1==-1)
sum1+=b2-a1;
else
if(b2==-1)
sum1+=a1-b1;
else
if(a1-b1<=b2-a1)
sum1+=a1-b1;
else
sum1+=b2-a1;
jia(root,a1,0);
}
printf("%d",sum1);
return 0;
}

最新文章

  1. 《Hey程序员 你适合加入创业公司吗?》再补充
  2. JavaSE复习_10 多线程复习
  3. Codevs 1063 合并果子
  4. iOS开发——免证书调试(Xcode7,iOS9)
  5. python基础之字典dict和集合set
  6. 大手册(书籍)排版利器-XML自动排版生成工具
  7. property--staticmethod--classmethod
  8. vue的过滤器语发及应用案例
  9. 实验3 敏捷开发与XP实践实验报告
  10. let&#39;s encrypt申请
  11. latex之矩阵表示
  12. C++ Programming Language中的narrow_cast实现
  13. 第三篇、Python函数
  14. 常用Linux 服务器命令--各种性能指标命令
  15. vue之vue-cookies安装和使用说明
  16. yii2 使用阿里大鱼短信
  17. 记一次诡异的bug
  18. Fig 7.2.4 &amp; Fig 7.3.2
  19. 将DataTable转换为List,将List转换为DataTable的实现类
  20. day6 hashlib模块

热门文章

  1. jdk8新特性--函数式接口的使用
  2. gitlab私有环境搭建
  3. MACD波段选股
  4. springboot项目实用代码整理
  5. windowsAPI创建句柄失败的返回值
  6. netcore使用EFcore(第一个实例)
  7. 如何理解H264 编码
  8. java网络编程--httpurlconnection
  9. linux命令管道符
  10. 二、详解mysql数据类型