吃到大份了.
发现相邻交换和包含 1,n 的交换的 Δ 形式复杂,所以先将形如 (1,i),(i,n),(i,i+1) 的交换贡献到答案上.然后考虑 1<j<i<n 且 i−j>1 的交换 (i,j) 的贡献.
考察交换后序列价值和原序列价值的差 Δ.记 li=ai−1,ri=ai+1,oi=∣li−ai∣+∣ri−ai∣,有
Δ=∣li−aj∣+∣ri−aj∣+∣lj−ai∣+∣rj−ai∣−oi−oj
考虑枚举绝对值的符号,有
Δ=s1,s2,s3,s4∈{−1,1}max[s1(li−aj)+s2(ri−aj)+s3(lj−ai)+s4(rj−ai)−oi−oj]
分离 i 和 j,有
Δ=s1,s2,s3,s4∈{−1,1}max[(s1li+s2ri−s3ai−s4ai−oi)+(s3lj+s4rj−s1aj−s2aj−oj)]
先枚举 i,考虑如何计算最大的 Δ.有
Δmax=1<j<imax{s1,s2,s3,s4∈{−1,1}max[(s1li+s2ri−s3ai−s4ai−oi)+(s3lj+s4rj−s1aj−s2aj−oj)]}=s1,s2,s3,s4∈{−1,1}max{1<j<imax[(s1li+s2ri−s3ai−s4ai−oi)+(s3lj+s4rj−s1aj−s2aj−oj)]}=s1,s2,s3,s4∈{−1,1}max[(s1li+s2ri−s3ai−s4ai−oi)+1<j<imax(s3lj+s4rj−s1aj−s2aj−oj)]
枚举 s1,s2,s3,s4 的所有可能取值,对每个取值预处理第二项即可快速计算.
我操我真想不到这个.
考察如何确定一个点 u 的父亲.若 u 没有任何被要求的祖先,直接连到 1 上显然是最优的.考察 u 的祖先约束集合 ancu,一个简单的想法是直接连到 argmaxv∈ancudepv 上.不妨设该策略选择的点为 pu,若存在 w 满足 u∈ancw,且存在 x∈ancw,x∈ancu,deppu<depx<depu,问题就出现了:u 的父亲至少应该是 x,不然 w 的祖先约束无法被全部满足.
这启发我们按照深度降序确定节点在新树中的父亲.对于叶子节点 u,此问题不存在,直接选择 ancu 中深度最深的点 v.选择后,为使 u 的其他祖先约束被满足,这些点必须成为 v 的祖先,即将 ancu 中除 v 外的点加入 ancv.写一个启发式合并堆模拟该过程即可.