发现差分是有周期的,对于任何一个数组 a 都存在一个数 f(a) 使得 a 在做 f(a) 次差分后会变回 a。那么不断差分实际上就是在一个环上转,不同环上的点互相不可达。可以找到每个点 u 在环上的位置 p_u,那么同一个环上,令环长为 m,从 u 到 v 的距离就是 (p_v-p_u)\pmod m。
现在先考虑第二个问题。我们可以选取字典序最小的那个数组作为一个环的代表。为了求出每个数组 a 可以到达的字典序最小的数组 a',我们考虑令 k 从小到大依次决定是否要乘上 (1+x)^{2^k}。令 a_i=1 且 a_{j}=0(j<i),那么乘上 (1+x)^{2^k} 时第一个会变化的位置就是 a_{i+2^k},可以由此决定要不要乘。同时这个过程也同时求出了 a 到 a' 的距离 p_a。
从上述过程容易知道第一个问题的答案:环长就是最小的 2^k 使得 i+2^k>m。于是我们就只需要解决形如 \sum_{1\leq i\leq j\leq n}((p_i-p_j)\bmod m) 的问题,容易用树状数组解决。