由于我懒,并且这里面除了D2T3恶心以外都不难写,所以很多代码都没写……
对于某一个合法的操作序列(操作序列定义为每次交换的两组数),可以随意交换顺序,仍然合法。所以对于一个操作集合,答案就加\(|S|!\)。
从小往大考虑,要么不变,要么枚举变哪两个位置。变完之后显然可以相邻两个缩在一起。
变的位置必须合法,只有1或2种情况。
就是求虚树大小,set维护。
用原根化乘为加,然后倍增做背包,用NTT优化。
二分答案\(t\),然后考虑如何判断合法。
想到网络流:连边\((S,i,t\times B_i),(i,j+m,+\infty),(j+m,T,A_i)\),看是否满流。
(日常想不到网络流……)
有一个式子:
\[
d(i\times j)=\sum_{x|i}\sum_{y|j} [\gcd(x,y)=1]
\]
为什么?考虑一个合法的因数,钦定它的质因子能在\(i\)里面拿就在\(i\)里面拿,否则在\(j\)里面拿掉剩下的。这个式子就相当于枚举在\(i\)里面拿的(不包括还需在\(j\)里面拿的质因子)和在\(j\)里面拿的,所以要互质。
然后这题随便推推就没了。
看到区间修改,大概可以想到线段树?
考虑如何合并两个区间。你发现对于某一个区间,只能有两边的点不与其他点连通,所以合法的情况并不多。
于是分类讨论一下,合并的方式也不多,就十几种……
然后就没了,可以看 https://www.cnblogs.com/maijing/p/4832745.html ,因为我既不想画图也不想写代码。
原文:https://www.cnblogs.com/p-b-p-b/p/11478356.html