Range Sorting (Hard Version)
随后对于每个位置i,找到它前面的合法区间和后面的合法区间,ans减去前面的合法区间*后面的合法区间。先初始化答案,即对于每个i,ans += (i - 1) * ((i - 1) + 1) / 2。即等差数列求和,把所有合法不合法的花费都加起来,后面再把合法的减去。给出一个数组,对所有子数组,找到其中的非升序区间r,l。其花费为r - l。对于前面的合法区间可以用单调栈先找到区间的右端点,然后再用二进制倍增的思想找到左断点。至于每个位置后面的合法区间,可以用r数组代替,可以用单调栈的方法先预处理好r数组。
原创
2023-05-15 13:35:41 ·
225 阅读 ·
0 评论