首先考虑初始排列,pi会让周围所有比其大的元素深度+1,所以要求每个点的深度,只要其被覆盖了几次即可 这个覆盖可以通过处理每个元素的左右边界(单调栈O(n))+线段树区间更新(Ologn(n))来做 然后是将排列最左边一个元素移到最右边: 在左边删元素pi,只会让pi右边所有比其大的元素深度-1, 在右边加上元素pi,会让pi左边比其大的元素深度+1 这种循环左右移动,需要频繁更改线段树的下标,不好操作,所以我们一开始直接用一个两倍的数组来建立线段树,只要查询时查询长度为n即可 #includ…