21

https://www.luogu.com.cn/problem/P11344

感觉根本不是人。

考虑构造一个函数 \(f\),使得对于 \(x\not=y\not=z\),有 \(f(x,y)\not=f(y,z)\)

给每个数赋一个权值 \(s(x)\),然后令 \(f(x,y)\) 返回第一个 \(s(x)\)\(1\)\(s(y)\)\(0\) 的二进制位。这样就可以满足 \(f(x,y)\not=f(y,z)\) 了。为了保证存在一个这样的二进制位,需要保证任意两个 \(s\) 都不存在超集关系,令 \(s\) 的 popcount 全都相同即可。

按照这种方法做完一轮之后,值域会被缩小到 \(20\)。第二个函数实际上是不弱于这样做两轮的,可以把值域缩小到 \(4\)。第三个函数只需要把 \(4\) 缩小到 \(3\) 即可。不动 \(0,1,2\),把 \(3\) 的位置赋成左右两个数的 mex 即可。

https://www.luogu.com.cn/problem/P3571

设深度 \(\le i\) 的节点数量为 \(s_i\),那么答案就是 \(\max\{i+\lceil\frac{n-s_i}{k}\rceil\}\)

感觉这个看起来就挺对的,所以不学证明了。

https://www.luogu.com.cn/problem/CF2096H

前置知识:在异或卷积的意义下怎么算 \(\prod(1+a_ix)\)

考虑所有多项式的 fwt 数组乘起来之后长什么样子,发现这还是一个 fwt 的形式,所以直接做。

回到原题,设 \(s(k, r)=\sum_{i=0}^r(-1)^{\text{pc}(k\&i)}\)。若 \(k\) 的 lowbit 为 \(x\),则 \(s(k,r)=(-1)^{\text{pc}(\lfloor\frac{r}{2^{x+1}}\rfloor,\lfloor\frac{k}{2^{x+1}}\rfloor)}\times s(2^x,r\bmod 2^{x+1})\)

所以枚举 lowbit,然后就变成了对长度为 \(2^{m-x}\) 的数组做前置知识里的问题,然后就做完了。

https://codeforces.com/problemset/problem/2183/H

记录一下怎么优化形如 \(dp_i=\min\{dp_j+w(j,i)\}\) 的 dp,其中 \(w\) 满足四边形不等式。

这个东西显然是有决策单调性的。考虑从小到大枚举 \(i\),在这个过程中维护 \(i\sim n\)\([1,i-1]\) 内的最优决策点。这个也是单调的。那么当 \(i\) 增大时,会把一段后缀的最优决策点变成 \(i\)。用类似珂朵莉树的东西维护连续段,直接在末尾弹就可以了,最后需要一个二分处理一下散块的问题。复杂度是 \(O(n\log n)\) 的。

https://www.luogu.com.cn/problem/P11696

值域倍增线段树,感觉我写的不会比题解清楚, https://www.luogu.com.cn/article/37pih27e

https://www.luogu.com.cn/problem/P11866

有点分治那也可以有链分治。

考虑一条链怎么做,只用两个变量交替赋值即可。

考虑一般树的情况,找出一条链,还是使用两个变量交替在这条链上赋值,在这个过程中递归进所有子树跑。应该是 \(\log_3n\) 的。

posted @ 2026-03-23 16:14  Egg_eating_master  阅读(18)  评论(0)    收藏  举报