苏格兰计划[副本] day3 CF1083

本文总结了五道算法竞赛题目的关键点:day3#526的树形DP通过枚举LCA求解;B2000的贪心问题涉及前缀计数和二进制搜索;C2900的线段树挑战在于利用Mex值和信息合并;D3500和E2400分别涉及复杂决策和坐标优化。
摘要由CSDN通过智能技术生成

day3 #526 div1(CF1083)

A 1800

非常水的树形DP,说是取一条简单路径,其实就是枚举lca就可以了,枚举lca然后计算最大值子树路径和次大值子树路径的和+lca的权值,就可以了

B 2000

非常水的一个贪心,显然到了第i位能有几个不同的前缀就用几个,然后大于k就对k取min即可,1~i构成的二进制数中间有多少个数?显然用类似快读的方法就可以计算了

C 2900

一个非常神奇的线段树,首先题目保证了每种权值都会出现,然后如果mex是x,肯定有一个简单路径上包含了 1 1 1 ~ x − 1 x-1 x1,所以可以考虑二分这个x,那么有没有简单路径,可以用线段树来进行信息合并,我们定义f[l,r]=(u,v)表示 u → v u\rightarrow v uv的简单路径是最短的包含 l l l~ r r r之间所有数字的路径,那么比如f[l,mid]和f[mid+1,r]的合并,就是枚举四个端点中的任意两个,尝试是否能使另外两个在这两个点之间的简单路径上,如果可以就合并,不行就gg,每次交换的话,实质上就是把f[l,l]换成(inv[r],inv[r]),f[r,r]换成(inv[l],inv[l]),相当于两个单点修改,而查询就是在线段树上二分一个最大的f[0,x]

D 3500

人生成就不来,溜了溜了

E 2400

先按照x坐标排个序,显然如果y坐标递增,老的就会被新的包含,然后选哪个就很麻烦,幸好题目保证了不会存在两个矩形存在包含关系,所以考虑递减就行了,那么若想选第i个矩形,假设从之前第j个转移, d p [ i ] = d p [ j ] + ( x [ i ] − x [ j ] ) ∗ y [ i ] − v a l [ i ] dp[i]=dp[j]+(x[i]-x[j])*y[i]-val[i] dp[i]=dp[j]+(x[i]x[j])y[i]val[i],所以 d p [ i ] = m a x { d p [ j ] − x [ j ] ∗ y [ i ] } + x [ i ] ∗ y [ i ] − v a l [ i ] dp[i]=max\{dp[j]-x[j]*y[i]\}+x[i]*y[i]-val[i] dp[i]=max{dp[j]x[j]y[i]}+x[i]y[i]val[i],那么假设决策点为 j j j,要最大化的是 d p [ i ] dp[i] dp[i],所以把上式转化为 d p [ j ] ( y ) = y [ i ] ( k ) ∗ x [ j ] ( x ) + ( d p [ i ] − x [ i ] ∗ y [ i ] + v a l [ i ] ) ( b ) dp[j](y)=y[i](k)*x[j](x)+(dp[i]-x[i]*y[i]+val[i])(b) dp[j](y)=y[i](k)x[j](x)+(dp[i]x[i]y[i]+val[i])(b)
显然斜率优化维护一个下凸壳,然后观察怎么样的斜率会被弹,假设j<k且k优于j,则
d p [ j ] − x [ j ] ∗ y [ i ] < d p [ k ] − x [ k ] ∗ y [ i ] dp[j]-x[j]*y[i]<dp[k]-x[k]*y[i] dp[j]x[j]y[i]<dp[k]x[k]y[i]
移项得 d p [ k ] − d p [ j ] x [ k ] − x [ j ] > y [ i ] \frac{dp[k]-dp[j]}{x[k]-x[j]}>y[i] x[k]x[j]dp[k]dp[j]>y[i]
也就是只要队首前两个满足斜率>y[i]就可以直接弹队首了
然后他保证了y递减,所以可以直接做

F 3400

人生成就不来,溜了溜了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值