标签:处理 link 个数 product text ber def ids cut
枚举第一个集合的\(\textbf{mex}\),想办法让它合法,于是就可以算出第二个集合的\(\textbf{mex}\),在两个都合法的情况下取它们和的最大值。
正数和负数分开算,枚举选多少个正数,如果最后乘积是正的就让选的数绝对值尽量大,否则让选的数绝对值尽量小。
如果本来重心就唯一就随便找一条边把它砍了再加上,否则把其中一个重心子树里的某个叶子节点砍下来连在另一个重心上。
发现如果\(a_i>a_{i-1}\),那么\(b_i=b_{i-1}+a_i-a_{i-1},c_i=c_{i-1}\),否则\(b_i=b_{i-1},c_i=c_{i-1}+a_i-a_{i-1}\)。我们假设\(c_1=x\),那么\(b_1=a_1-x\),很显然\(b_n=b_1+\sum_{i=2}^n \max(0,a_i-a_{i-1})\)。由于我们要求\(\min\{\max(b_n,c_1)\}\),令\(\sum_{i=2}^n \max(0,a_i-a_{i-1})=s\),那么\(x=\frac{a_1+s}{2}\)。由于每次修改只对\(a_l-a_{l-1},a_{r+1}-a_r\)有影响。直接维护\(s\)即可。
考虑把\(10^5\)以内的质数全部预处理出来(大概\(9600\)个),然后其实一个数\(n\)如果不是质数必然有\(\leq \sqrt{n}\)的质因子,所以我们把质数分成\(\sqrt{9600} = 97\)组,把每组里面的质因数\(p\)拿出来做\(B\)操作,如果返回值和应有值不一样,说明有\(p\)这个因子,于是就把\(p^k\)拿出来做\(A\)操作直到返回为\(0\),那么可以确定最终答案有\(p^k\)因子。一组质数处理完之后再问一遍\(1\)的倍数,这样可以找到第一个最小的质因子,再直接问其他的质因子的倍数就行了。
题解 Codeforces Round #670 (Div. 2) (CF1406)
标签:处理 link 个数 product text ber def ids cut
原文地址:https://www.cnblogs.com/Kylin-xy/p/tijie-CF1406.html