Dual (Hard Version)

这篇题解

只能说以后看到hard version的先将easy version的做一遍,剩下的想法也比较自然了

update 2024.9.6

重新做一遍,做出来了,按照模拟加分类讨论做的。从\(a_1\)开始,若一直不降到\(a_k\),然后有\(a_{k+1}<a_k\),就考虑怎么样把\(a_{k+1}\)变得比\(a_k\)大,此时发现,如果\(a_{k+1}\)是正数且\(a_k\)是正数就可以直接让\(a_{k+1}\)加上\(a_k\);进一步地可以知道,如果全是正数我们就可以让\(a_2\)加上\(a_1\)\(a_3\)加上\(a_2\),以此类推;对于全是负数的情况同理;对于既有负数又有正数的情况,考虑转换为前两种情况。不难想到根据正数负数的相对个数大小以及正数最大值和负数绝对值最大值的相对大小进行分类讨论。注意的就是前后缀相邻相加的方法最多只会进行\(n-1\)次,而不是\(n\)次(如果按照\(n\)次算就超过\(31\)次了)

posted @ 2024-07-10 19:17  最爱丁珰  阅读(22)  评论(0)    收藏  举报