loj3175. 「IOI2019」排列鞋子

原题

做这题时一定不要被ioi吓到,因为这题非常非常降智

结论1:从左到右便利一遍,对于一个x和前面最左边第一个没被匹配的x匹配,一定是最优的

证明显然,发现交叉和包含一定不优

于是我们对于每一个x可以得到与它匹配的鞋子bx

但问题来了,我们是让x去找bx还是bx去找x呢?

结论2:所有鞋子同向移动一定最优

从左到右便利每一个位置,对于每个没有操作过的位置,如果将它的bx给拉过来,那么xbx就一定不会出现在别的鞋子对中间了,那么也就缩短了别的鞋子对之间的距离。但如果x屁颠屁颠的跑过去凑到bx旁边,那么很可能就会使得别的鞋子对在移动的时候需要和他们两个进行交换了。

因此我们对于找bx我们可以用指针找到前面第一个没被匹配的反向鞋子;而对于从左到右扫记录贡献时,我们记录一下哪些鞋子已经配对了;而对于统计答案时,就是看(x,bx)中没有被配对的鞋子个数。这样原问题就变成了一个单点修改,区间求和的问题,可以用树状数组解决

最终复杂度O(nlogn),瓶颈在于树状数组

posted @   FOX_konata  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示