贪心正确性求问
查看原帖
贪心正确性求问
542282
lrqlrq250楼主2023/10/15 20:42

注:本人没有提交该题,是比赛结束之后听同机房写挂了的同学提到,一起讨论的,现在没有题解,想问一下对不对。违规紫衫。

将 cc 按正负分开,设正数有 kk 个,负数有 n−kn - k 个,那么给正数的人安排靠前的 11 到 kk 名,负数的人安排靠后的那些。

对于正数和负数,按他们原本 aa 的大小分别从小到大排序,下面以正数为例,取出最长的一段前缀满足 ai=ia_i = i,设其长度为 ll,最后的形式应该是1,2,3,…p,l,p+1,…l−1,l+1,l+2,…k1, 2, 3, \dots p, l, p + 1, \dots l-1, l+1, l+2, \dots k(把 ll 插到前面的一个位置),相当于对一个人摆烂,使得他后面的人都有贡献,他自己有负的贡献,它前面的人没贡献,做一下后缀和维护,整体就是 O(n)O(n) 的。

另:这个做法通过了所有大样例。

2023/10/15 20:42
加载中...