https://www.luogu.org/problem/P2827
NOIP 2016 D2T2
比较朴素的想法是开一个大根堆,每次取出堆顶元素,切开放回去;
问题在于怎么维护每次增长的q长度;
根据相对论 可以想到,拿出的蚯蚓不增长,其它蚯蚓增长,等价于拿出的蚯蚓变短;
那么我们只需要维护蚯蚓增长的长度SUM,每次取出蚯蚓时加上SUM+=q,切开后每段减去SUM,最后统计时再加上总的SUM就好了;
但这样复杂度还是太高;
考虑到每次拿出最长的,后切开的两段肯定比先切开的两段短;
所以本身就有单调性,不用堆维护也可以;
参考网上的题解,开三个数组,分别储存切前的A1,切的第一段A2,切的第二段A3,每次从三个数组中选出最长的,切成两段,放到A2,A3中就好啦哇;
原文:https://www.cnblogs.com/xwx2354672579/p/11624273.html