• 有 n 堆⽯头,第 i 堆个数为 a[i],每次随机选⼀个⽯头然后把那⼀整堆都扔了,求第 1 堆⽯头期望第⼏次被扔
• 给 1…n 这 n 个数,每次随机选择⼀个还在的数并且删掉他的所有约数,求期望⼏次删完
• 给定 n 个硬币,第 i 个硬币的价值为 w[i],每次随机取⾛⼀个硬币,获得的收益是左右两个硬币的价值的乘积,求期望总价值
会了。
期望总价值等价于求总价值再给它套个期望。
那么我们考虑总价值是什么。
$S=sum^{i<j}X(i,j)*W(i)*W(j)$
$E(S)=sum^{i<j}E(X(i,j))*W(i)*W(j)$
$E(X(i,j))=2/C(j-i+1,2)$
那么$E(S)=sum^{i<j}2/C(j-i+1,2)*W(i)*W(j)$
• 求所有区间的最大值*最小值之和
天皇的做法。
普通分治。以最大值分开。这个可以ST表实现 $O(n*logn)$
然后可以维护区间的两个单调队列(用deque)。(里面放下标,方便之后的二分,deque是连续内存)(吗?)
表示从左/右端点开始的最小值,那么它一定是单调不增的,我们在小的分治区间枚举每个最小值(单减),大的分治区间用二分二分出大于当前枚举的点的权值的下标。
然后用线段树区间查询出整个区间的最小值×数量的和。
考虑怎么合并单调队列。
以从左端点开始的deque为例。
合并两个deque,就把右边的区间的队头(最大值)一直pop,直到队头小于等于左边的队尾,然后更新线段树上的权值。
$O(n*log^2)$