第六次
CF 神秘题
A
考虑 $n$ 位置上的数 $a_n$,发现其与 $(a_n,n]$ 的数形成逆序对。
于是将 $a_n$ 与这些数依次交换,发现它们依次减一,且此时 $a_n=n$,于是规约成规模小 $1$ 的子问题。
B
令 $\cdots$ 表示任意 $01$ 串。
$x$ 是奇数,则 $x$ 形如 $1\cdots 1$。
把 $x$ 左移至 $\text{lowbit}$ 对齐原 $\text{highbit}$,得到 $y$ 形如 $1\cdots 1000\dots$。
$x\oplus y$ 得到 $z$ 形如 $1\cdots 0\cdots 1$。
把 $z$ 加上 $y$,此时 $z$ 形如 $1\cdots 01\cdots 1$。
把 $z$ 异或上 $2y$,此时 $z$ 形如 $11\cdots 1$。
把 $z$ 异或上 $x$,此时 $z$ 形如 $1000\dots$,这个 $1$ 在 $x$ 的 $\text{highbit}$ 左边一位。
用这个 $1$ 消去 $y$ 除其 $\text{lowbit}$ 外其他位,此时 $y$ 剩下的 $\text{lowbit}$ 就是 $x$ 的 $\text{highbit}$。
然后用此时的 $y$ 消去 $x$ 的 $\text{highbit}$,如此直到 $x=1$ 即可。
C
分治,设当前区间为 $[l,r]$,考虑跨过分治中点 $m=\lfloor\dfrac{l+r}2\rfloor$ 的满足条件的区间个数。
枚举区间左端点 $i\in[l,m]$,设右端点为 $j$,则对每个 $i$,总有 $p1,p2$ 满足:
- $\forall j\in(m,p1]$,$[i,j]$ 的 $\max,\min$ 均落在 $[i,m]$ 中,
则若此时 $\text{popcount}(\max\limits_{k=i}^ma_k)=\text{popcount}(\min\limits_{k=i}^ma_k)$,则所有 $j\in(m,p1]$ 的 $[i,j]$ 均符合要求,否则均不负责要求。
- $\forall j\in(p1,p2]$,$[i,j]$ 的 $\max,\min$ 一个落在 $[i,m]$ 中,一个落在 $(m,j]$ 中,
以 $\min$ 落在 $[i,m]$ 中,$\max$ 落在 $(m,j]$ 中为例,
问题变为统计 $(p1,p2]$ 中有多少 $j$ 满足 $\text{popcount}(\max\limits_{k=m+1}^ja_k)=\text{popcount}(\min\limits_{k=i}^ma_k)$,
直接开桶维护 $c_x$ 表示当前 $(p1,p2]$ 中有多少 $j$ 满足 $\text{popcount}(\max\limits_{k=m+1}^ja_k)=x$,更新 $p1,p2$ 时更新这个桶即可。
- $\forall j\in(p2,r]$,$[i,j]$ 的 $\max,\min$ 均落在 $(m,j]$ 中,
问题变为统计 $(p2,r]$ 中有多少 $j$ 满足 $\text{popcount}(\max\limits_{k=m+1}^ja_k)=\text{popcount}(\min\limits_{k=m+1}^ja_k)$,
发现与 $i$ 无关,提前预处理 $e_x$ 表示 $(m,x]$ 中满足该条件的 $j$ 的个数。
然后倒序枚举 $i$,发现 $p1,p2$ 单调后移,双指针即可。
D
不会正解。
搜的时候保证每步合法,可以 $90$ 分。
发现此时根据剩余牌可以确定当前局面,记忆化一下可以过。

浙公网安备 33010602011771号