Loading

回首看去来时的路已经不知不觉地被白色的天空掩埋

2024.5.22

ZROI - 樂園

对于 \(n\) 个三元组 \((a_i,b_i,c_i)\) ,如果任意两个三元组互不相同,那么我们可以在 \(O(n\log n)\) 时间内求出三维偏序对的数量:

  • 首先按照每一维从小到大排序,按照这个顺序重新分配每一维,使得每一维都构成一个排列
  • 然后,考虑二项式反演,设 \(f_i,g_i\) 分别是恰好/钦定 \(i\) 维是偏序的点对数量,那么 \(f_0=g_0-g_1+g_2-g_3\),同时由对称性 \(f_0=f_3=g_3\),所以答案 \(f_3=g_3=\frac{g_0-g_1+g_2}{2}\)\(g_0,g_1\) 容易求出,\(g_2\) 可以通过 \(3\) 个二维偏序求出。
  • 时间复杂度 \(O(n\log n)\)

ZROI - 远溯

\(C(x)\) 为卡特兰数的生成函数,我们考虑怎么求出 \([x^n]C(x)^m\):

solution 1

因为卡特兰数 \(C(x)=1+xC(x)^2,B(x)=C(x)-1\),那么 \(\frac{B(x)}{(B(x)+1)^2}=x\)\(A(x)=\frac{x}{(x+1)^2}\)为其复合逆,\(H(x)=(x+1)^m\),那么根据扩展拉格朗日反演:

\[[x^n]H(B(x))=[x^{n-1}]\frac{1}{n}H'(x)(\frac{x}{A(x)})^n=[x^{n-1}]\frac{m}{n}(x+1)^{m-1}(x+1)^{2n}=\frac{m}{n}\binom{2n+m-1}{n-1} \]

solution 2

考虑卡特兰数等价于格路计数,我们强制在每走完一段后走一步 \((+1,0)\),这样就会走到 \((n+m,n)\),这是一个双射,因为我们如果有一条这样的格路,只要每次找到最小的能缩的位置缩一下一定能对应到一个之前的格路。

24省选day9-詩超絆

有两个序列 \(a,b\),若干次单点修改 \(a,b\),然后区间查询:
每次建出区间 \([l,r]\) 的笛卡尔树,然后从根开始每次向和大的一边走,问最终走到哪里。

对于这种每次走到区间和更大的一半的问题,我们一般策略是找到第一个区间和小于一半的时刻,这样只需要条 \(O(log V)\) 次。

这个题比较吊,我们考虑当前区间前缀和的三等分点 \(lmid,rmid\),那么每次如果最大值在左区间或者右区间那么一定不影响(因为另一半区间和一定更大),直到最大值在中间区间为止,此时下一步不论如何一定值域区间一定会少 \(\frac{1}{3}\),那么复杂度就对了。

[CEOI2018] Fibonacci representations

首先考虑只有 \(F_n\) 一个数时怎么拆分:\(F_n\to F_{n-1},F_{n-2}\),注意到此时如果拆 \(F_{n-1}\) 那么无论如何最后都不可能让每个数最多出现一次,因此只会拆 \(F_{n-2}\),然后 \(F_{n-1},F_{n-2}\to F_{n-1},F_{n-3},F_{n-4}……\),一共有 \(\lfloor \frac{n+1}{2}\rfloor\) 种不同的拆法。

现在假设不止一个数,并且满足:

  • 任意两个不相同。
  • 任意两个不相邻。

那么可以用类似上述的过程证明只有拆分没有合并,因此排序之后每一段是独立的,而第 \(i\) 段的长度只和第 \(i-1\) 个位置是否拆分有关,那么可以有一个 DP 为 \(f_{i,0/1}\) 表示前 \(i\) 个位置,第 \(i\) 个是否拆分的方案数吗,转移可以写成简单的矩阵乘法,用平衡树维护矩阵连乘可以做到 \(O(n\log n)\)

对于一般的情况,我们考虑通过一些变换变成上面的样子。

我们知道有个东西叫做斐波那契表示,即每个数可以唯一表示为上述的形态,现在考虑动态维护加入数 \(x\) 的过程:

  • 如果 \(x-1,x,x+1\) 都没有出现,那么直接加入就好了。
  • 如果 \(x\) 没有出现,那么可以把 \(x-1,x\) 或者 \(x,x+1\) 合并起来,然后向 \(x+1\) 递归,因为一个数只会被删除一次,所以均摊正确。
  • 如果 \(x\) 出现了,那么需要把一个 \(x\) 拆分成 \(x-2,x-1\),然后继续向左拆分,接着再从右到左依次合并,通过分析可以发现,如果设 \(l\) 是满足 \(l,l+2,l+4……,x-4,x-2,x\) 都存在的最小的 \(l\),那么做完之后会变成 \(l-2,l+1,l+3……x-3,x-1,x+1\),可以在平衡树上二分找到 \(l\),然后平移一位,方便起见只需要维护相邻两个位置的差分。这里细节很多,因为需要特判 \(l\leq 2\) 的情况,并且平移之后有可能和前面或者后面的段合并,递归进行即可,只会进行 \(O(1)\) 次。

所以总复杂度均摊 \(O(n\log n)\)

[THUPC2024] 研发计划

如果没有 \(f\) 的限制就是最大权闭合子图板子,因此我们考虑延续最小割的思路,稍微改一下建图。

对于每个技术 \(i\) 拆成入点,出点 \(i,i'\),然后连边:

  • \(i\to i'\),边权为 \(f_i\)
  • 如果选技术 \(i\) 必须要选技术 \(j\),连边 \(i'\to j\),边权 inf
  • 如果选产品 \(i\) 必须要选技术 \(j\),连边 \(i\to j\),边权 inf
  • 源点连向产品 \(i\)\(S\to i\),边权 \(g_i\)
  • 技术 \(i'\) 连向汇点 \(T\),边权 \(h_i\)

答案就是 \(\sum g_i-W\),其中 \(W\) 是最小割。

正确性证明:

在这个图中,一个产品点如果和源点连代表选,否则代表不选;

那么对于一个技术 \(i\),如果他选,那么它就不能和汇点连通,要么割掉 \(i\to i'\)(直接购买),要么它的前置技术都被选且 \(i'\to T\)

posted @ 2024-05-22 17:24  Larunatrecy  阅读(29)  评论(0编辑  收藏  举报