最近各种瞎写数论题,感觉需要回顾一下数据结构

写一发splay冷静一下(手速过慢,以后要多练练)

用splay是最直接的方法,但我感觉离散一波应该可以做出来(没仔细想过)

现在没有很追求代码优美,感觉得先打的对打的快O(∩_∩)O

 #include <bits/stdc++.h>
#define INF 1000000000
using namespace std;
int root,N,n,x;
int fa[],c[][],a[];
void rot(int x)
{
int fat=fa[x],k=c[fat][]==x;
c[fat][k]=c[x][!k];fa[c[x][!k]]=fat;
fa[x]=fa[fat];c[fa[fat]][c[fa[fat]][]==fat]=x;
fa[fat]=x;c[x][!k]=fat;
}
void splay(int x,int g)
{
for(int y;(y=fa[x])!=g;rot(x))
if(fa[y]!=g)
if((c[y][]==x)==(c[fa[y]][]==y)) rot(y);else rot(x);
if(g==) root=x;
}
int lower(int p)
{
if(!root) return ;
int ans=INF;
for(int i=root;i;(p>=a[i])?i=c[i][]:i=c[i][])
if(a[i]>=p)
ans=min(ans,a[i]);
return ans-p;
}
int upper(int p)
{
if(!root) return ;
int ans=-INF;
for(int i=root;i;(p>=a[i])?i=c[i][]:i=c[i][])
if(a[i]<=p)
ans=max(ans,a[i]);
return p-ans;
}
void add(int x)
{
a[++N]=x;c[N][]=c[N][]=;
if(!root)
{
root=N;
return;
}
for(int i=root;;)
if(x<=a[i])
if(!c[i][])
{
c[i][]=N,fa[N]=i;
splay(N,);
break;
}
else i=c[i][];
else
if(!c[i][])
{
c[i][]=N,fa[N]=i;
splay(N,);
break;
}
else i=c[i][];
}
int main()
{
scanf("%d",&n);int ans=;
for(int i=;i<=n;i++)
{
scanf("%d",&x);
if(i==) ans+=x;
else
ans+=min(upper(x),lower(x));
add(x);
}
printf("%d\n",ans);
return ;
}

最新文章

  1. vsftp &quot;上传 553 Could not create file&quot;
  2. java 27 - 8 反射之 通过反射来设置某个对象的某个属性为指定值
  3. 在ubuntu上搭建开发环境6---安装和使用vim及其插件(Pathogen和NERDTree)
  4. Android生成一维码
  5. HDU 4662 MU Puzzle 2013 Multi-University Training Contest 6
  6. 原”zencart建站仿站俱乐部”现升级为”zencart 学院“!
  7. List&lt;T&gt; 和DataTable的相互转换
  8. MyEclipse导入Maven项目报错 Plugin execution not covered by lifecycle configuration:
  9. Codeforces 161D Distance in Tree
  10. PHP - 多维数组
  11. Spring 类构造器初始化实例
  12. JavaScript循环之for/in循环
  13. 移植rtmpdump(librtmp)到android
  14. python绝技 — 侦听802.11 Probe请求
  15. PHP学习笔记--1,不总结,不掌握,不明白!
  16. 阿里云服务器Centos 7安装PHP
  17. Dynamics CRM 打开数据加密报错及修改用户邮件保存报错的解决方法
  18. Leetcode_205_Isomorphic Strings
  19. css中的position(定位)
  20. 洛谷3704 [SDOI2017] 数字表格 【莫比乌斯反演】

热门文章

  1. D3D 光照和材料 小样例
  2. 淘宝code
  3. 如何用CSC.exe来编译Visual C#的代码文件
  4. 使用JSmooth制造java jar文件可以运行exe文件教程图像
  5. jquery调用wcf案例
  6. cygwin的安装使用
  7. C#排序算法
  8. 《剑指Offer》面试题-二维数组中的查找
  9. C++ multimap容器访问同一键值元素的不同方法
  10. 聊天工具mychat