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 为偶数的数就行了。

posted @ 2024-03-02 17:45  lgh_2009  阅读(13)  评论(0编辑  收藏  举报