#Educational Codeforces Round 35

_vb92xHWx8zQTc_34 vp

A. Nearest Minimums

题意:求数列里两个最近的最小值的距离

题解:先把最小值求出来,再把最短距离求出来???

\(O(n)\)

1min

B. Two Cakes

题意:有两个蛋糕质量为 \(a,b\) ,要把 \(a\)\(b\) 分到 \(n\) 个盘子里,每个里面质量是整数且只有一种蛋糕,求所有盘子最小质量的最大值。

\(a,b,n \leq 100\)

题解:枚举 \(a\) 被切成了几块,就没了??

\(O(n)\)

3min

C. Three Garlands

题意:有三个数 \(a,b,c \leq 1500\) ,问是否存在 \(x,y,z\) 使得任意正整数 \(n\) 都满足 \(\% a=x\)\(\% b=y\)\(\% c=z\)

题解:

如果 \(a,b,c\) 中有 \(1\) 显然可以。

如果 \(a,b,c\) 中有两个 \(2\) 显然可以。

如果 \(a,b,c\) 都是 \(3\) 显然可以。

如果 \(a,b,c\) 有两个 \(4\) 一个 \(2\) 显然可以。

剩下的情况手动枚举一下,\(1\leq \frac{1}{a}+\frac{1}{b}+\frac{1}{c}\) 的不多,发现只有这四种可能。

(或者可以直接对于\(1\leq \frac{1}{a}+\frac{1}{b}+\frac{1}{c}\)\(a,b,c\) 枚举 \(x,y,z\),然后枚举到 \(lcm(a,b,c)\) 判断,懒得写了)

\(O(1)\)

5min

D. Inversion Counting

题意:维护一个数据结构,支持区间翻转,求逆序对的奇偶性。

\(n \leq 1500\)\(q \leq 2\times 10^5\)

题解:

初始状态的奇偶性可以暴力算。

每次区间翻转,只有区间内部的逆序对个数有变化。

设原来的逆序对为 \(x\) 个,区间长度为 \(l\),则之后会变成 \(\frac{l*(l-1)}{2} -x\)

因为原来是逆序对的现在都不是了,原来不是的现在都是了。

每次只要看 \(\frac{l*(l-1)}{2}\) 的奇偶性就行了( \(x\)\(-x\) 同奇偶)

\(O(n^2+q)\)

3min

E. Stack Sorting

题意:称一个长为 \(n\) 的排列可以被“栈排序”,当且仅当它的出栈序列可以是 \(1,2\cdots n\)。给出长度为 \(n\) 的排列的前 \(k\) 项,求这个排列的字典序最大值。

题解:

“栈排序”干的事情时把若干个不相交的区间翻转。

所以原排列一定可以被表示成 \(p_1,p_1-1\cdots 1,p_2,p_2-1\cdots p_1+1 \cdots p_m,p_m-1 \cdots p_{m-1}+1\)

判一下给出的 \(k\) 个是否合法,把当前的 \(p_i\) 补到 \(p_{i-1}+1\),然后从 \(n\) 往下填就好了,显然这样字典序最大。

\(O(n)\)

9min

F. Tree Destruction

题意:有一棵树,每次可以选两个叶子,给答案加上它们的距离,并且删掉一个,求最大答案并构造方案。

\(n \leq 10^5\)

题解:

由于距离某个点的最远点一定是直径的某个端点,不在直径上的点均可以取到这个值。

然后就变成了一条链,随便删就是最优的。

但是为什么最后删直径上的点最优呢?

假设在删直径的时候某个点贡献是 \(x\) ,如果它和别的点的贡献 \(>x\) ,且它到那个点的路径和直径没有公共边,那么直径就不是直径了。

怎么保证没有公共边呢?

如果有公共边,往公共边那里跳一步就好了,肯定还在那两条路径上。

构造的话就把直径和两端到所有点的距离求出来,就随便构造了?

\(O(n)\)

66min

G. Mass Change Queries

题意:有 \(n\) 个数,\(q\) 次修改,每次把区间里的所有 \(x\) 改成 \(y\) ,求操作完后序列。

\(n,q \leq 2\times 10^5\)\(a_i \leq 100\)

题解:

分块+并查集。

对于每块里面维护一个并查集。

是整块的把 \(x,y\) 并到一起里,并把这个连通块的权值设成 \(y\)

对不是整块的先把当前状态求出来暴力修改。

\(O(n^{1.5}*\alpha(n)^{1.5})\)

题解2:

线段树。

线段树的每个节点维护一个100元组,第 \(x\) 个是 \(y\) 表示当前区间里面所有 \(x\) 都应该是 \(y\)

每次修改就直接把这 \(\log n\) 个区间里面的第 \(x\) 改成 \(y\) 就好了。

\(O(n\log n*a_i)\)

题解3:

其实这题暴力可过

\(O(nq)\)

posted @ 2020-05-18 21:52  daduda  阅读(105)  评论(0)    收藏  举报