题面
题意:给你一个环,求两个数之间没有比它们大的数的对数.
题解:
可以先把最大的提到前面,这样即可破环为链.
考虑一对符合要求的不同的数,可以当作较小的数一直向左(或者右)找,找到的第一个比它大的数,所以每个数记一个
l,r
l
,
r
表示向左和向右第一个数的坐标,若它比所有它右边的数和除第一个以外左边的数都大,就不计入答案.
快速求
l,r
l
,
r
的方法(其中v为数值):
r[i]=i+1;
while (r[i]<=n && v[r[i]]<v[i])
r[i]=r[r[i]];
再考虑相等的数,设
c[i]
c
[
i
]
为
i
i
右边等于的数的个数,可以用与上述方法类似的方法求出,答案加上所有
c[i]
c
[
i
]
之和即可.
Code