考虑如何使环变成一条链,等价于 :环中的两点之间如果包含了链的左端点,则这两点必然不能互相看到
所以只要保证链的左端点高度最高即可。
对于有若干个最高的山也不会影响。因为两个最高点之间任意方向的弧形都满足条件。
设l[i]表示i左边第一个比i高的位置,r[i]表示i右边第一个比i高的位置,cnt[i]表示在i到r[i]的左开右闭区间内高度等于i的山的数目
任意符合要求的两点只会算一次。所以规定符合要求的两点的贡献计于靠左且高度较小的点上。
考虑一个点 i 的贡献。因为在 i 右边第一个高度大于 i 的点j后的点不可能 与i配对。所以只需统计 i — j 区间还有多少个与 i 高度相等的点即可
但是当符合要求的两点的靠左的点高度较大时 即 点(i, l[i]) 与 点 (i ,r[i])并没有考虑,在每个点统计答案时加 2 即可
但是当 l[i]=0 且 r[i]=n 时, (i, l[i]),(i ,r[i])其实是一组