【A】数学类题目(待完坑)
- 结论 1:操作后集合一定是一个等差数列。
- 结论 2:令 \(d=\gcd_{i=1}^{n-1} a_{i+1}-a_i\),其中 \(a\) 为集合排序后得到的数列,那么当且仅当 \(d=2^k\) 时有解。注意 \(d=0\) 也是存在解的。
st表 + 二分。
令 \(g=\gcd(u,v)\)。
对于 \(l\le g\le r\) 的,其一定是 \((g,2g)\)。则有 \(\left\lfloor\frac{r}{2}\right\rfloor-(l-1)\) 个。
对于 \(g<l\) 的,整除分块。考虑从 \((kg,(k+1)g)\) 去判定。其中 \(k-1=\left\lfloor\frac{l-1}{g}\right\rfloor\)。
正难则反?补
首先相同的 \(p\) 可以缩点。于是默认 \(p\) 都不同。
然后对于 \(x\),我们把边分为 \(\frac{V}{x}\) 类,分别为连向 \((x,2x),[2x,3x),...,[kx,V]\)。然后只需要连每类中代价最小的边即可,总边数 \(O(n\log n)\)。
证明考虑存在 \(x<y<z<2x\),则 \(x\rightarrow y,y\rightarrow z\) 一定优于 \(x\rightarrow y,x\rightarrow z\)。
想让 \(A\) 的权值尽量大?那么 \(|A|=2\)。
对于每一位,0 的个数 \(\ge 3\),那么这一位一定为 0。
对于 0 的个数 \(\le 2\) 的位,我们把当前位为 0 的数加入一个集合 \(S\),那么 \(|S|=O(\log V)\)。
对于 \(S\) 中每个数,\(O(n)\) 枚举另外一个数是多少,然后 check 即可。
对于 \(T=\{1,2,3,\cdots,n\}\setminus S\) 中选出两个数的情况,只会选出其中 \(\gcd(T_i,T_j)\) 最大的整数对,因为怎么选按位与都不变。复杂度 \(O(n\log^2 V)\)
设计 dp,\(f_{i,j}\) 表示将 \(j\) 拆分后,分解的数都 \(\ge i\) 时最大值最小是多少。
答案为 \(\min_{i}\{\max_{j\in A}\{f_{i,j}\}-i\}\)
当 \(j<i^2\le j^2\) 时,\(f_{i,j}=j\)。
否则当 \(i\not | j\) 时,\(f_{i,j}=f_{i+1,j}\)。
当 \(i^2\le j\) 时,\(f_{i,j}=\min\{f_{i+1,j},f_{i,j/i}\}\)。
于是我们考虑每次继承上次的 dp 数组,然后略微修改即可。修改次数是 \(O(n\log n)\) 的。注意到随着 \(i\) 的减小 \(\max_{j\in A}\{f_{i,j}\}\) 也会在减小,双指针维护。
摆了
adorable
浙公网安备 33010602011771号