比赛链接
A
- $y=0$ 的情况,答案是 $0$。
- $y>0$ 的情况,我们把每两次按钮先捆绑在一起,算出 $k=\lceil \frac{y}{x+1} \rceil$。
- 然后判断是否可以在前 $2k-1$ 次就完成任务,即判断 $(k-1)(x+1)+1 \ge y$。
- 如果上式成立,答案是 $2k-1$,否则是 $2k$。
B
提供一个比较暴力的做法。对于至少有两位的数字,它是 $4$ 的倍数,等价于最后两位组成的数是 $4$ 的倍数。
记录出现的所有数位(以及次数),然后枚举 $1 \le i,j \le 9$。
- 如果 $i \neq j$,那么可以输出 YES 的条件是 $10i+j$ 是 $4$ 的倍数,且数位 $i,j$ 都有在原数出现。
- 如果 $i = j$,那么可以输出 YES 的条件是 $10i+j$ 是 $4$ 的倍数,且数位 $i$ 在原数出现至少两次。
注意特判一位数的情况。
C
由第一个式子:异或和不是 $0$,那么它一定大于 $0$。
将这个不等式代入第二个式子,那么必有:$\text{lcm}{(c_1,c_2,...,c_m)} < 2\times \min(c_1,c_2,...,c_m)$。
而最小公倍数一定是序列每个数(包括最小数)的倍数,因此 $\text{lcm}{(c_1,c_2,...,c_m)}=\min(c_1,c_2,...,c_m)$。
所以,要求 $c_1,c_2,...,c_m$ 每个数相等。
然后别忘了异或和不是 $0$,结合上一行的结论可知我们只能选奇数个相等的数。
所以如果某个数在序列出现奇数次可以一次删空;如果出现偶数次就需要删除两次(偶数 = 1+奇数)。
D
为了让 $\text{MEX}$ 尽量大,我们应该让所有不为 $0$ 的 $t_i$ 值都不一样。
同时我们想要所有数的和尽量小,根据贪心策略,对于越大的 $t_i$ ,对应的 $i$ 应该越小。
例如,我们想要让 $\text{MEX}$ 等于 $4$,构造的总和最小的序列是 $1,1,1,2,2,3$,这样 $t_1=3,t_2=2,t_3=1$。
因此,当 $\text{MEX}$ 等于 $k+1$ 时,$M$ 的下限应该是 $v_k=$ $\sum_{i=1}^k i(k-i+1)=\frac{k^2(k+1)}{2}-\frac{k(k+1)(2k+1)}{6}+\frac{k(k+1)}{2}$。
化简后是 $v_k=\frac{k^3+3k^2+2k}{6}$。
对于每个询问,可以二分出最大的一个不超过 $M$ 的 $v_k$,输出 $k+1$ 即可。注意二分过程不要溢出了。
P.S. 由于这个数这是 $O(k^3)$ 级别的,也可以暴力求出所有在 $10^{18}$ 以内的 $v_k$。
E
对于一个节点 $x$,它的颜色会波及到 $1$ 与 $x$ 的链上所有点的贡献。
假设 $p$ 初始的子树内红点有 $r_p$ 个,蓝点有 $b_p$ 个。假设节点 $x$ 在 $p$ 节点的子树内。
- 若 $x$ 由红变蓝,且 $r_p-b_p \ge 2$,那么 $D(p)$ 会减少 $2$。
- 若 $x$ 由红变蓝,且 $r_p -b_p \le 0$,那么 $D(p)$ 会增加 $2$。
- 若 $x$ 由蓝变红,不等式左边改成 $b_p-r_p$ 即可判断。
因此我们 DFS 两次。
- 第一次统计每个节点所在子树的红蓝点个数。
- 第二次对于每个 $x$,树上前缀和求出 $1$ 到 $x$ 的链上每个点 $p$ 中,满足 $r_p-b_p \ge 2$,$r_p-b_p \le 0$;$b_p-r_p \ge 2$,$b_p-r_p \le 0$ 的点数。根据节点 $x$ 颜色的变化情况得到 $D(p)$ 的变化量,再根据变化量的正负统计答案数。
F
利用若干个 vector 分别记录每个值的出现位置集合。我们先把原序列每个数取出,然后按照数值**从大到小**的顺序把数字放回。
放回的过程中,假设当前考虑等于 $k$ 的数(先不放回),那么所有满足 $a_i=a_j=k$ 的区间 $[i,j]$,里面放回的数都大于 $k$。
所以每个区间的贡献,等于放回区间内的数的个数。求完贡献后把所有等于 $k$ 的数放回。
以上操作可以用树状数组快速维护、查询。
区间数太多了怎么办?$d(i,j)$ 怎么乘上去?我们可以只先关注**极小有效区间**,即满足 $a_i=a_j$ 但中间不存在等于 $a_i$ 的数的区间 $[i,j]$。
区间长度为奇数,等价于左右端点的奇偶性相同;区间长度为偶数,等价于端点的奇偶性相反。
所以对于极小区间 $[i,j]$,假设四个量,这都可以用线性复杂度求出:
- $[1,i]$ 中等于 $a_i$ 且下标是奇数的元素个数 $x$;
- $[j,n]$ 中等于 $a_i$ 且下标是奇数的元素个数 $y$;
- $[1,i]$ 中等于 $a_i$ 且下标是偶数的元素个数 $z$;
- $[j,n]$ 中等于 $a_i$ 且下标是偶数的元素个数 $w$。
那么区间 $[i,j]$ 对整个序列的贡献是 $c(i,j) \times (xy+zw+2zy+2xw)$。
这个贡献可以代表所有包含 $[i,j]$ 且端点等于 $a_i$ 的区间,在 $[i,j]$ 这一段产生的贡献和。
容易证明极小有效区间数是 $\mathcal{O}(n)$ 的,所以总时间复杂度是 $\mathcal{O}(n \log n)$。
标签:...,le,题解,牛客,108,text,等于,区间,2k From: https://www.cnblogs.com/HZSPZCR/p/18636794