题意:
给出一个n的排列pn,Q个询问(1e6级别),每个询问为Li,Ri。
设Ml,r为l~r之间最大值的位置,那么函数f(l,r)=r-l+1+f(l,mid-1)+f(mid+1,r)
f(l,r) (l>r)=0
题解:乍一看除了暴力递归似乎没有什么好办法QAQ,但其实这是一道很套路的题。
第i个位置对答案的贡献就是它在递归中的深度
我们考虑所有询问的Li都为1。我们想办法从1~i-1递推出i的深度
设depi为i的深度
找到i前面第一个比pi大的位置j(如果没有为0),那么不难发现dep[i]=dep[j]+1。可以发现这时j+1~i-1之间所有数的深度也都加了1! 因为如果没有这个i,从j就直接跳到了j+1~i-1的最大值位置,而现在却要在i这边中转一下。
那么我们就可以维护出Li为1的所有询问了
然后我们从左到右枚举左端点i。考虑每次删除最左边一个数的情况。
我们设j为i右边第一个比pi大的位置。
对于i+1~j-1,因为pi是这段区间中的最大数,现在没有了pi,所以对于这段区间深度要集体-1。
然后对于一个Li为i的询问就求个区间和就好了。
没有代码