题目链接
做法
我们用一个四个数字来表示这个四元组的相对大小关系。
比如说闪电图腾我们就定义为$1342$
山峰图腾表示为$1243$或$1432$
现在我们要求的就是$f(1342)-f(1243)-f(1432)$
以下式子中的$X$表示任意
我们先用树状数组求出两个数组$l[i],r[i]$,分别表示$i$这个点左边比我小的点的个数,右边比我小的点的个数。
对于求$f(1X)$
这个非常方便,对于每个点,贡献为$\binom{n-i-r[i]}{3}$
对于求$f(1234)$
我们在$3$处统计答案,对于每个点,贡献为$(n-i-r[i])*\binom{l[i]}{2}$
对于$f(1X2X)$
我们在$2$处统计答案。
可以发现每个点的贡献就是$f(132)*(n-i-r[i])$
现在我们考虑求$f(132)$,
$f(132)=(f(132)+f(312)+f(123)+f(213))-(f(312)+f(123)+f(213))$
都是在最后一个位置上统计答案。
对于前一个括号,实际上就是从前面找两个数,有一个小于我就行了,答案为$\binom{l[i]}{2}+l[i]*(i-1-l[i])$
而后面一个括号,第二个数小于我,第一个数随便,也就是$\sum\limits_{j=1}^{i-1}(j-1)*[a[j]<a[i]]$,树状数组维护就好了。
对于$f(13XX)$
在$3$处统计答案。
同样可以发现答案等同于$f(132)*(n-i-r[i])$
与上面不同的是,这次统计答案的位置在$3$.
$f(132)=(f(132)+f(312)+f(321))-(f(312)+f(321))$
都是在$3$所在位置统计答案。
对于前一个括号,发现$2$一定在$3$右侧,而$1$的位置则随意,那么答案就是$\sum\limits_{j=i+1}^{n}(a[j]-1)*[a[j]<a[i]]$,同样可以树状数组维护。
而后面一个括号,实际上就是$f(3XX)=\binom{r[i]}{2}$
以上就是每种情况下每个点的答案,我们对于每种情况扫一下所有点就好了。
复杂度$O(n*logn)$
代码
1 |
|