W
e
l
c
o
m
e
: )

家训

菜成什么样了

2156 Div.2

D

压线过了。

考虑从低位到高位判定 0/1,每次 check 的数大约减半,那么 \(time=n+\frac{n}{2}+\frac{n}{4}+\dots=2n+\epsilon\),有 \(\epsilon\) 是因为可能上一步只删了下取整个。

剪枝是如果当前位置只剩 0 或 1 了就 skip。

E

二分答案 \(g\),设 \(f_{g}(i)=\sum_{j \ne i} [b_{\max(i, j}-b_{\min(i, j)}\ge g]\)

假如 Alex 先手,那么只要有一个 \(f_{g}(i) \ge 2\) 那么他就一定能保证最终结果 \(\ge g\),因为 Alex 锁了 \(i\) 后再锁其中一个对应的数即可。

那么考虑 Hao 最开始要删谁,显然是删完它后剩下的所有 \(f<2\)

暴力枚举第一个删的数,朴素做是查影响的所有数,直接写线段树能做,但发现我们只需要维护前后最近的各最多 3 个点即可,于是暴力 check 即可(set 维护 3 个值,每次超出时把最大的删掉)。

submission

F1&F2

操作简述:选择 \(3(12/21)\) 变成 \(1(23/32)\)

如果首项为奇数 \(a_1=2k+1\),则每次选 \(a_1, a_1-1, a_1-2 \to a_1-2, a_1, a_1+1\) (后面两个先后顺序不重要)

那么最后一定会变成 \(a_1=1\),之前所有 \(<a_1\) 的数 +1

\(a_{1}=2k\),注意到我们能类似把 \(a_1\) 变成 2。

考虑一个任意位置的奇数什么时候能变成 \(1\),显然是比它小的都在它右边,

考虑最靠左的满足条件的位置 \(p\),我们操作先使得 \(a_p=1\),然后把 \(a_1=2\)

因为首位是 \(2\),所以 \(p\) 至少能被找到(即 \(a_p=1\) 算一个合法解)

这样最优的原因:考虑 \(1\le j<p\),由于 \(\forall a_{x}<a_p, x>p\),所以 \(a_j > a_p\),那么减小 \(a_p\) 的时候不会对 \([1, p)\) 产生任何影响


那么做完上述过程递归,将剩余部分变为 \(1-(n-1/n-2)\) 的排列继续操作,复杂度 \(O(n^2)\), link

简化上述操作,就是相当于找第一个 \(2 \nmid a_{p}, \min_{1\le j \le p} a_j=a_p\)\(p\),将其变为 1(首项为偶数时),其他的相当于按相对顺序赋值 2-n。然后把 \(1\) 删除,其余前移一位,等价于开始就把 \(p\) 删掉,所有 \(>a_p\) 的数全部 -1。

重新整理操作

  1. \(p\)(若首项为奇数则直接跳过 12 到第三步)
  2. 删数 \(a_p\),并使所有 \(>a_p\) 的全部 -1。
  3. 删除首项,并使 \(>a_1\) 的数-1。

注意到 23 操作并没有影响相对大小,即不影响 1 操作。

维护 \(pos_i=k\) 表示 \(a_k=i\),找合法 \(p\),我们先满足 \(\min_{1\le j\le p} a_j=a_p \to \min_{1\le j< a_p} pos_j>p\),考虑第一步从首项开始找,即设 \(p_1=\min_{1\le j<a_1} pos_j\)(首先 \(pos_{(i, p_1)}\) 没有一个出现的比 \(p_1\) 早,\(pos_{(p_1, a_1)}\) 的不合法(因为比它们小的 \(p_1\) 在前面),故 \(p_1\) 是满足条件 \(a_p<a_{1}, \min_{1\le j\le p} a_j=a_p\) 的最小 \(p\)),若 \(a_{p_1}\) 此时为偶数,则找 \(p_2=\min_{1\le j<a_{p_1}} pos_j\)(显然 \(a_1>a_{p_1}>a_{p_2}\),所以 \(\min_{1\le j<a_{p_1}} pos_j\ge \min_{1\le j<a_{1}} pos_j\),即 \(p_2 > p_1\)),同理能得到 \(p_2\)\(p_1\) 右侧的满足 \(a_{p}<a_{p_1}<a_{1}, \min_{1\le j \le a_p} a_{j}=a_p\) 的最小 \(p\),因为 \((a_{p_1}, a_1)\) 之间没有合法点,所以 \(p_2\) 相当于满足条件 \(a_p<a_{1}, \min_{1\le j\le p} a_j=a_p\) 的第二小 \(p\)

通过上述操作,我们能不断跳每个合法点,看其是不是奇数,直到找到第一。

注意区间 -1 完全不影响剩余数的相对大小,于是 \(\min pos\) 使用线段树查,区间 -1 不操作,删数相当于变成 \(+\infty\),查实际数额外开一个 BIT 即可。

跳的次数,如果一个 \(a_{p_i}\) 一开始被访问时是奇数,那么它立刻会被删,如果是偶数,那么它下一次必然被删,所以最多查 \(2n\) 次。link

2162 Div. 3

div3 未必没有 div2 难

G

考虑两个菊花连起来,中间边 \(n-(n-1)\),设 \(s\) 为挂在 \(n-1\) 下的点的和,则

\[S=n(n-1)+s(n-1)+(\frac{(n-2)(n-1)}{2}-s)n=\frac{n^3-n^2}{2}-s \]

\(S=d^2\),又有 \(0 \le s \le \frac{(n-2)(n-1)}{2}\),不妨取 \(d=\lceil \sqrt{\frac{n^3-n^2}{2}-\frac{(n-2)(n-1)}{2}} \rceil\),则能保证 \(s\) 满足条件。

需要特判 \(n=2,4, 8\)(因为 \(d=f(n)\) 在这几个点 gg 了)。剩余凑 \(s\) 直接从大到小放即可。link

2164 Div. 1+2

E

首先,如果是有欧拉回路,那么代价就是 \(\sum w_i\)

如果不是,最优的做法(传送)一定是给若干对奇度数点连边,全变为偶度数点之后走欧拉回路

为什么是奇度数点之间连呢?考虑 Kruskal 重构树,从 \(1-m\) 顺序合并每条边,

重构时建立新点 \(x=e_{i}\)(注意区分原来的点),不管分不分为两个集合都要新点连向原点,那么求 \(x\) 传送到 \(z\) 的代价就是 \(w_{\operatorname{LCA}(x, y)}\)

但其实实际上还可以往上走几步再走回来,所以要根往下做 min

那么就是树上有若干点需要匹配,注意做了 min 之后代价会一直变小,即深度深结算一定不劣,于是 dfs 统计一下做完了

posted @ 2025-10-29 20:01  127_127_127  阅读(7)  评论(0)    收藏  举报