原题链接:https://codeforces.com/contest/1550/problem/D
分析:
引入图论,1~n为点,当ai+aj=i+j时,在i和j之间连一条边;要满足ai!=i,只需要不存在奇圈;要使边数最多,即构造点集大小相差为0或1的完全二部图;
初始时,令ai=i
对k = 1, 2, ...,令二部图里一个部分里的所有数+k,另一个部分里所有数-k,直到这个部分里出现超过[l,r]范围的数;
显然,上述过程的终止只与每个部分里的min和max有关;
于是,我们枚举二分图每个部分里的min和max,计算这种情况下+k和-k分别能到多少,累加起来乘上满足这个min和max限制的二分图的个数;
更进一步,我们可以枚举max-min,复杂度O(n)