CF1901

link

A

答案为 max{maxi=2n(pipi1),2(tpn)}

B

传送与传送之间的每一段都是一个区间,也就是每次选一个区间 +1

这个是经典的,答案为 12i=1n+1|cici1|,c0=cn+1=0,证明考虑差分,每次将两个数 +1,1,显然最少需要所有正数差分值得和,也容易构造解。

C

显然只用关心 minmax,即 n=2

答案的上界是 log2(maxmin)+1,构造的话考虑当前数分别是 i,i+k,分 i,k 奇偶性讨论,都可以通过 i2i+12 使 kk2

D

i 处开始的最小值为 x,有

{ajx(nj),j<iajx,j=iajx(j1),j>i

依此可求出 x 的下界,对于 i=1n,增量考虑,用 multiset 维护即可,O(nlogn)

E

fi 表示,子树 i 中仍有最终未被删除的点的最大贡献。

转移有fu=max{au,maxvsonufv,au+maxk2,v1,v2,,vksonufv} 分别对应只保留 uu 被压缩和 u 不被压缩三种情况。

考虑 fu 和答案的关系,我们钦定 u 为根,有ans=max{au,au+maxk2,v1,v2,,vksonufv,maxv1,v2sonu(fv1+fv2)}

分别对应只保留 uu 不被压缩和 u 被压缩三种情况。

简化一下,即fu=max{maxvsonufv,au+maxk0,k1,v1,v2,,vksonufv}ans=max{maxv1,v2sonu(fv1+fv2),au+maxk0,k2,v1,v2,,vksonufv}

k=1,2k3 的部分贪心取即可。时间复杂度 O(n)

因为可以删光,记得 ans0max

F

使梯形面积最小,即保证答案合法同时,直线在 x=n12 处的 y 尽量小。记 mid=n12

容易发现直线一定至少过两个折点,否则一定可以通过顺时针或逆时针旋转减小 yc,直到碰到另一个点。又因为所有点都在这条直线下方,所以答案直线一定是凸包某条线段的所在直线。因为让 ymid 最小,更进一步地,是凸包过 mid 的线段所在的直线。于是我们解决了没有修改的问题。

加上修改,似乎要支持一个合并凸包的操作。但我们只关注跨越 mid 的那条线段,先看如何处理左半边的答案。

设当前时刻为 i,i[0,n2)。暴力想法是枚举左半边的点和右半边的点共 O(n2) 条线段,算出 ymid 最大值,对应的线段一定在凸包上。发现有效的线段很少,对于左边的某点 P,它最优的匹配点一定在右半边的凸包上,换句话说,是 P 与右半边凸包的切点,于是可以二分求得。

g(x,y) 为过 (x,y) 点的切线,f(L) 为直线 Lmid 处的值,则 ansi=max(maxj=0if(g(j,bj)),maxj=i+1n2f(g(j,aj))),预处理前缀后缀 max 即可。

右半边的做法类似,时间复杂度 O(nlogn)

posted @   Terac  阅读(5)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示