学习笛卡尔树
笛卡尔树(知识总结+板子整理) 笛卡尔树 例题1:hdu-6305 RMQ Similar Sequence 【题意】: 题意:定义RMQ(A,l,r)为:序列A中,满足A[i] = max(A[l],A[l+1],...,A[r])的最小的i。如果对于任意(l,r)都满足RMQ(A,l,r)=RMQ(B,l,r)则为A和B是RMQ Similar。现在出A序列,B序列的每个数都是0~1之间的实数,问满足与A是RMQ Similar的所有B序列中所有数之和的期望。 题解:不难看出如果A和B是RMQ Similar,则A和B的笛卡尔树同构。考虑B中的每个数是0~1之间的实数,因此出现相同数字的概率为0,可以假设B是每个数都不相同排列。设A的笛卡尔树每个子树的大小为sz[u],则任一B排列与A同构的概率是 ,因为B中每个数满足均匀分布,因此期望值为1/2,和的期望为n/2,因此满足与A同构的B中所有数之和的期望为 所以求:sz[i] 指的是笛卡尔树每个子树的大小。 贴上代码: 1 #include<cstdio> 2 #include<algorithm> 3 #include<stack> 4 using namespace std; 5 typedef long long ll; 6 const int N = 1e6 + 5 ; 7 const int INF =