题意 给一个\(n\)的全排列数组\(a\),求一个递推数组每一项的值:\(ans[i]=ans[j]+1\),\(j\)为\(a[pos[i]-k]到a[pos[i]+k],(pos[i]为i在数组a中的下标)\)中小于\(i\)的最大的值. 分析 这题set的做法更优秀,但是想练习一下在主席树上二分. 按权值建主席树,对每个\(i\)去查询\(a[pos[i]-k]到a[pos[i]+k]\)中小于\(i\)的最大值,查询时先查询右儿子,再查询左儿子,因为找到的右儿子一定比左儿子大,直到找到…