T1:
首先容易(???)想到最优方案一定是一些建筑高度不变,其他建筑高度填平
记f[i]表示考虑前i个建筑, 并且第i个建筑的高度不变的答案
考虑从j转移,中间高度为t,(f[i]= sum _{k=j+1}^{i-1} (t-h[k])^2 + c*(h[j]+h[i]-2t))
首先t可以找二次函数对称轴快速求出
其次考虑到两边的高度一定大于中间可以用单调栈来维护有效的转移点
T2:
四维偏序或二维莫队
T3:
线段树维护树的直径
然后暴力枚举断边,设两个连通块的直径为(l_1,l_2),则危险程度为(max(l_1,l_2,lceil l_1
ceil + lceil l_2
ceil + 1))
发现T了,不能每次查询直径,可以在开始时预处理前后缀直径
考虑如何构造方案,找到两连通块直径的中点,连接即可