求助站外题,有没有大佬能切
说下思路即可,非常感谢!
题目描述:
给定一个长度为n的排列p,有q次询问
每次询问区间[l,r](下标从1开始)单独拿出来构成的笛卡尔树的节点深度和,定义根节点深度为1。
笛卡尔树是有堆性质的二叉树,任意节点的值均小于其左儿子和右儿子的值,对一个序列建的笛卡尔树的中序遍历即为原序列。
对一个无重复数字的序列递归建笛卡尔树的过程如下:
1.找出区间最小值c,设其位置为mid;
2.对[l,mid一1]和[mid+1,r]建笛卡尔树,设根为ls和rs;
3.将mid的左儿子设为ls,右儿子设为rs。
对于100%的数据,保证1 < n, q < 100000,1<p_i<n, 单次询问中1<l<r<n。
附样例: 许多样例
谢谢!