波动值之和

金牌导航 Splay-1

题目大意

给出一个数列,求∑i=1nminj=1i−1∣ai−aj∣\sum_{i=1}^{n}min_{j=1}^{i-1}|a_i-a_j|∑i=1n​minj=1i−1​∣ai​−aj​∣

输入样例

6
5
1
2
5
4
6

输出样例

12

样例解释

5+∣1−5∣+∣2−1∣+∣5−5∣+∣4−5∣+∣6−5∣=5+4+1+0+1+1=125+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=125+∣1−5∣+∣2−1∣+∣5−5∣+∣4−5∣+∣6−5∣=5+4+1+0+1+1=12

数据范围

1⩽n⩽32767,∣ai∣⩽1061\leqslant n \leqslant 32767,|a_i|\leqslant 10^61⩽n⩽32767,∣ai​∣⩽106

解题思路

用Splay存起来,然后每次找到最接近当前数的数(把当前数旋转为根节点,然后在左子树找最大,在右子树找最小)

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 40000
using namespace std;
int n, x, w, rt, ans, s[N], ls[N], rs[N], fa[N];
int ss(int x)
{return x == ls[fa[x]];
}
void up(int x)
{int y = fa[x], z = fa[y], g = ss(x)? rs[x]: ls[x];if (z) ss(y)? ls[z] = x: rs[z] = x;if (ss(x)) rs[x] = y, ls[y] = g;else ls[x] = y, rs[y] = g;fa[x] = z;fa[y] = x;if (g) fa[g] = y;
}
void Splay(int x, int y)//旋转
{while(fa[x] != y){if (fa[fa[x]] != y)ss(x) == ss(fa[x])? up(fa[x]): up(x);up(x);}if (!y) rt = x;
}
void add(int v)//加点
{int x = rt, y = 0;while(x){y = x;if (v < s[x]) x = ls[x];else x = rs[x];}s[++w] = v;fa[w] = y;if (v < s[y]) ls[y] = w;else rs[y] = w;Splay(w, 0);
}
int ask()//查询
{int x = ls[rt], y = rs[rt], xx, yy;//分别查询左右子树if (x) while(rs[x]) x = rs[x];//左子树最大的if (y) while(ls[y]) y = ls[y];xx = s[rt] - s[x];yy = s[y] - s[rt];if (!x) return yy;if (!y) return xx;return min(xx, yy);
}
int main()
{scanf("%d", &n);scanf("%d", &ans);s[++w] = ans;rt = 1; while(--n){scanf("%d", &x);add(x);ans += ask();}printf("%d", ans);return 0;
}

【Splay】波动值之和(金牌导航 Splay-1)相关推荐

  1. 【Splay】文艺平衡树(金牌导航 Splay-2)

    #文艺平衡树 金牌导航 Splay-2 题目大意 给你一个1~n的序列,然后对序列的区间做若干次翻转,问你最后的序列 输入样例 5 3 1 3 1 3 1 4 输出样例 4 3 2 1 5 数据范围 ...

  2. 【LCT】城市旅行(luogu 4842/金牌导航 LCT-3)

    正题 luogu 4842 金牌导航 LCT-3 题目大意 给你一棵树,让你进行一些操作: 1.删除一条边 2.连接一条边 3.给一条路径上的点加上x 4.给出一条路径,在该路径选取两个点,求这两个点 ...

  3. 【luogu P4036】【ybt金牌导航4-5-3】火星人

    火星人 题目链接:luogu P4036 / ybt金牌导航4-5-3 题目大意 给你一个字符串,要你维护三个东西. 修改字符串的一个字符,往字符串的一个地方插入一个字符,询问两个后缀的最长公共前缀. ...

  4. 【LCT】弹飞绵羊(luogu 3203/金牌导航 LCT-2)

    正题 luogu 3203 金牌导航 LCT-2 题目大意 给你n个格子,当你在第i个格子时,可以往后跳aia_iai​格,让你进行几下操作: 1.修改第i个数 2.查询在第i个格子跳多少下会跳出界 ...

  5. 【LCT】洞穴勘测(luogu 2147/金牌导航 LCT-1)

    洞穴勘测 luogu 2147 金牌导航 LCT-1 题目大意 给你若干操作,有三种操作: 1.连接两个点 2.吧两个点之间的连边断掉(保证有这条边) 3.查询两个点之间是否连通 样例 #1 输入样例 ...

  6. 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)

    正题 luogu 7302 金牌导航 数据结构优化DP-4 题目大意 在坐标轴上会出现n个金币,第i个金币tit_iti​时在wiw_iwi​出现(只出现一个单位时间),价值为sis_isi​,当你t ...

  7. 【线性基】彩灯(luogu 3857/金牌导航 线性基-1)

    彩灯 luogu 3857 金牌导航 线性基-1 题目大意 给若干个01串,让你选择其中一些,问你异或的值有多少种 输入样例 2 3 OO XO OX 输出样例 4 数据范围 1⩽N,M⩽501\le ...

  8. 【树链剖分】【线段树】树的统计(金牌导航 树链剖分-1)

    树的统计 金牌导航 树链剖分-1 题目大意 给出一棵树,让你做若干操作,操作如下: 1.修改一个节点的值 2.查询两个节点之间路径的最大值 3.查询两个节点之间路径的和 输入样例 4 1 2 2 3 ...

  9. 【主席树】可持久化数组(金牌导航 可持久化数据结构-3)

    可持久化数组 金牌导航 可持久化数据结构-3 题目大意 给出一个序列a,让你执行若干操作,操作分为两种: 1.继承第v次操作后把第x个数改成y 2.查询第v次操作的第x个数的值 输入样例 5 10 5 ...

最新文章

  1. git——从远程库克隆
  2. 不错!基于Springboot 2.0 + LayUI开发的物流管理系统(已开源)
  3. CTFshow php特性 web111
  4. IBM Rational AppScan使用详细说明
  5. PHP如何添加变量 $_SERVER
  6. python输出字体的大小_Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格
  7. java B2B2C springmvc mybatis仿淘宝电子商城系统(十)用spring Restdocs创建API文档
  8. linux 管理 服务,Linux服务管理 详述
  9. React-Native的TextInput组件的设置以及获取输入框的内容
  10. Docker容器镜像删除不掉解决办法?
  11. 图示SaaS:走向平台化,会产生什么变化?
  12. blog转到CNBlog了
  13. dcs world f15c教学_高端DCS带电清洗用的什么清洗剂
  14. 怎样将手机屏幕投射到电脑
  15. Android 10 Settings应用二级菜单关于设备-Android版本中基带版本添加点击事件
  16. 【提供代码获取方式】matlab使用风羽法画大气环流
  17. 有了手机远程控制手机的软件,在家突然收到工作任务也不怕
  18. wire tox_Tox-rs的漫长旅程。 第1部分
  19. NAS入门之——My Cloud EX2+未入网的路由器局域网组网
  20. mysql数据库学习之sql调优思路

热门文章

  1. 陕西省计算机二级报名流程,计算机二级考试报名流程
  2. [PAT乙级]1001 害死人不偿命的(3n+1)猜想
  3. [蓝桥杯2015决赛]胡同门牌号-模拟+枚举
  4. 无法载入增效工具_山东省 智能工具箱 智能工具管理 工具管理企业数字化管理...
  5. python窗口显示表格_pyqt 调用tablewidget窗口时无法显示窗口内容
  6. Codeforces Round #726 (Div. 2) D. Deleting Divisors 博弈
  7. HDU2021多校第五天 1009 Array-树状数组求二阶前缀和
  8. CF1375G. Tree Modification(贪心,黑白染色)
  9. [ARC073C] Ball Coloring(贪心)
  10. CF626F. Bear and Fair Set