首页 > 其他分享 >闲话 22.9.27

闲话 22.9.27

时间:2022-09-27 20:33:30浏览次数:47  
标签:27 笛卡尔 int 闲话 fa 最小值 序列 22.9 节点

闲话

似乎没几个人把闲话设为显示
但是我除了闲话没啥了
所以不隐藏了
而且主要的简介都在摘要里面了

我等一等再去切 risrqnis
我还剩五个点和55pts(

今天想到拉格朗日的英文名是 lagrange
然后 Lag Train 延误列车
所以 Lag Range 延误区间

[这里放一张延误列车的pv截图,记得以后补大图]


莫春者,春服既成,冠者五六人,童子六七人,浴乎沂,风乎舞雩,咏而归。

羊のような雲が浮かんだ昼すぎ

懐かしい歌が風に揺れている

あなたの声で教えて貰った言葉

今でも忘れぬように

書き留めてる同じことを

笛卡尔树

是树。一般化的笛卡尔树在每个点有两个权值 \((a_i,b_i)\),对 \(a\) 满足堆性质,对 \(b\) 满足BST性质。

笛卡尔树在序列上建是很有用的。由此产生了四毛子等东西(
具体地,我们将序列的值赋作 \(a\),将序列下标赋作 \(b\)。容易发现这样使得一段连续的区间在笛卡尔树上也连续,而且区间最大/小值是区间端点的 LCA。

关于建树:
考虑单调栈维护右链。我们从左到右扫序列,每次将当前元素插入单调栈,作为栈顶元素的对应儿子。

for (int i = 1; i <= n; i++) {
    int k = top;
    while (k > 0 && h[stk[k]] > h[i])
        k--;
    if (k)
        rs[stk[k]] = i; 
    if (k < top)
        ls[i] = stk[k + 1]; 
    stk[++k] = i;
    top = k;
}

然后就可以把序列问题转化成树上问题了。

应用1:四毛子算法

\(\text{Four Russian Algo [pre] [pre]} \ (\pm 1 RMQ)\)

给定一个序列,满足其差分序列只有 \(+1,-1\)。\(O(n) -O(1)\) 求区间最小值。

我们进行分块。设块长为 \(B = \frac {\log n} 2\),则我们可以将区间最小值转化成三次最小值的最小值。如果我们能快速求得每块的最小值就可以通过ST表进行整块的维护。

考虑相邻元素之间差是 \(+1, -1\),因此在一块内本质不同的情况只有 \(2^B = \sqrt n\) 种。我们预处理每种可能的 RMQ,这样带来的复杂度花费不会超过 \(O(n)\)。ST 表有复杂度 \(O(\frac nB log nB) = O(n)\).

因此有 \(O(n) -O(1)\) 区间最小值。

\(\text{Four Russian Algo [pre] (Faster LCA)}\)

给定一棵树。\(O(n) -O(1)\) 求两点 LCA。

我们跑出树的(拓展)欧拉序,每经过一条边就记录两端点。
然后两点第一次在这个序里出现的位置间深度最小的点就是 LCA。我们发现深度的变化是 \(\pm 1\)。于是问题转化成 \(\pm 1 RMQ\) 问题,如上求解就行。

\(\text{Four Russian Algorithm}\)

给定一个序列。\(O(n) -O(1)\) 求区间最小值。

跑出这个序列的笛卡尔树。
于是问题转化成快速 LCA 问题,如上求解就行。

这就是四毛子。

应用2:拓展(?)建树

即在一棵树上建出笛卡尔树。

做法和序列笛卡尔树一样,也是直接并入。具体按如下程序(大根堆):
按权值扫描每个节点。扫描到一个节点时,判断所有与该节点相连的连通块。如果连通块的代表元小于该节点,则将该节点并入连通块,代表元设为该节点,并以该节点为父亲与代表元连边。

int fa[N];
int find(int x) { return x == fa[x] ? fa[x] : fa[x]=find(fa[x]); }

#define Aster(s, id) for ( register int i = head[s][id]; i; i = e[i].next )
int head[N][2], mlc;
struct node{
    int to, next;
} e[N<<2];
void adde(int u, int v, int id) {
    e[++mlc] = {v, head[u][id]};
    head[u][id] = mlc;
rep(i,1,n) {
    Aster(i, 0) {
        int ret=find(e[i].v);
        if(e[i].v < x and ret == x){
            adde(x,ret,1);
            fa[ret] = x;
        }
    }
}

\(\text{-SUPER- DouBlize}\)

给定一棵 \(n\) 个点的树,询问满足编号最小值为起点,最大值是终点的路径 \(x\rightarrow y\) 的数量。

\(n \le 1e6\).

构造两棵笛卡尔树,一棵小根一棵大根。问题转化成在两棵树上都是祖先子孙关系的节点对数。
跑出一棵树的dfs序,另一棵树进行dfs。dfs时将祖先在另一棵树上的dfs序插入树状数组,然后查询当前节点的dfs序区间就是答案。
主要是构造笛卡尔树,剩下的乱搞就行。

标签:27,笛卡尔,int,闲话,fa,最小值,序列,22.9,节点
From: https://www.cnblogs.com/joke3579/p/chitchat220927.html

相关文章

  • LeetCode[279. 完全平方数]
    279.完全平方数本题我们可以把他理解成一个图论我们的每一个结点就是每一个数值加了平方项以后就从当前值转移到了另一个值BFS常见套路定义一个队列,队列中有元素就......
  • 9.27
    今日内容1.垃圾回收机制2.流程控制理论3.流程控制之分支结构4.流程控制之循环结构垃圾回收机制"""有一些语言内存空间的申请和释放都需要程序员自己写代码才可以完......
  • 【闲话】2022.09.27闲话
    考试++今天大型机惨活动。明明只是去做了次核酸,怎么会变成这个样子呢?今天大型BA讨论活动L:泰国歌曲据说今晚\(\textrm{luogu}\)要修RMJ,希望明天会更好。......
  • 做题记录整理dp14 P5336 [THUSC2016]成绩单(2022/9/27)
    P5336[THUSC2016]成绩单这题难度标的虚高首先一眼区间dp,然后写出递推方程然后发现爆空间,再上离散化然后就没了。。。撑死也就是蓝题不过学到了一个离散化技巧#incl......
  • 2022-09-27 IOS 打包后图标背景变黑 Android 则正常
    前言:uniapp项目打包app,app的logo背景是透明的,打包后iso的图标背景是黑色,而Android则为透明,符合需求,至于ios为什么是黑色的,百度了一看有以下情况:图标的纤细信息里面的一个......
  • JavaWeb--JavaScript--2022年9月27日
    第一节  简介  第二节  JavaScript引入方式1、内部脚本:将JS代码定义在HTML页面中<!DOCTYPEhtml><htmllang="en"><head>  <meta......
  • 2022-09-27 uniapp项目中iconfont阿里云图标不显示
    前言:uniapp项目中iconfont阿里云图标不显示,运行到浏览器能显示,打包到真机(Android)和模拟器(Android)上能显示,ios不能显示,打包h5不能显示(ios和android和浏览器不能显示)原......
  • 9.27比赛记录
    T1不会,再见。/fnT2题意有\(n\)个奶牛排成一列,每次队头的牛都会插到第倒数\(c_i\)个位置上,问有多少个牛无法到达第一位。思路是道很厉害的二分。可惜赛时没打出来......
  • CSS0027: div 倒角效果
    1,<divid="test"></div>#test{display:inline-block;width:100px;height:100px;background:linear-gradient(135d......
  • AtCoder ABC 270 题解(D-F)
    AtCoderABC270题解(D-F)D-Stones(博弈DP)题目:​ 现在有一堆石子,一个序列a表示每次可以从石头里拿走多少个石子。当无法再拿出石头的时候,游戏结束。两边都以最佳策略......