第六次

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$ 分。

发现此时根据剩余牌可以确定当前局面,记忆化一下可以过。

posted @ 2023-07-26 21:32  Jijidawang  阅读(12)  评论(0)    收藏  举报  来源