CF vp合集
CF1936/1937
B
考虑计数只需要找到最后一个拐点和第一个拐点。
C
可以先花 \(n\) 次找到最大数,然后找一些位置 \(j\) 使得 \((p_i=n-1)|p_j\) 最大,最后找到最小的 \(p_j\)。考虑为啥是对的,因为得让异或最大,而且是排列,所以其中一个取最大不劣。然后找另一个能尽量填补0的位置的数。
D
重了 CF733E。
官方题解带 \(\log\),非常无脑。其实把二分改成两个方向的队列维护即可线性。但是不会询问不独立。
E
不是看了眼 U 群完全不会。
首先 hint 1 是显然的。
考虑建图,答案为 1 到 n 的最短路。但是边的级别是 \(n^2m\) 的,不可接受。
考虑把每个属性拉出来建图,对每个人的该属性排序,然后对相邻的点连一条边权为该属性之差的边。跑最短路即可。注意到预处理需要对自身连边。
F
感觉时间够是会的。
肯定想到拆位维护 b 的按位或值。
考虑如何合并。
维护每段最前/后的 1 的位置。
记 \([l,mid].lastone=a,[mid+1,r].firstone=b\)。
如果 \(\max(a\to mid)\le \max(mid+1\to b)\),肯定贪心的选 a,否则选 b。
max a 可以用 ST 表,于是拆位算贡献即可。
复杂度 \(O(q\log n\log v)\)。
CF1934
A
拆贡献。
B
可以 dp 较小的一段,剩下的直接用 15.
C
查询三个角,死亡分讨。
D1
考虑如果一个数是形如 \(2^x\) 的形式显然无解。
消掉高位的第一个 1 之后,构造 \(y\) 使得 \(y=2^t-1\),对于 \(y\) 分讨。
\(y<m\) 肯定无解,\(y>m\) 说明肯定能构造出 \(m\)。
D2
D1 中发现 \(2^x\) 是必败态。
于是可以知道 \(popcount(x)\) 是偶数时先手必胜。
考虑先手处于必胜只需要每次拆那个 popcount 为偶数的数就行了。