一些 CF 题

再开一坑!以后慢慢填吧。

感觉以后写题要加上题意简述了,不然往前看真的记不起题面。

CF2062D

给定一棵树,每个点有取值范围 [li,ri],每个点可以在范围内随意取值,进行任意次操作,每次操作选定 u,v,表示以 u 为根,v 所在的子树内的节点全部 +1,求通过操作使全树变成的最小统一权值。

n2×1050liri109

*2200,div1+2的 D 题,第一眼看上去很不可做,又是换根子树加,又是全局统一的。

来分析一下性质,换根子树加一显然可以做转化,钦定 1 为根,当选定的 u 不在 v 的子树内时,操作等价于子树 +1,当 uv 的子树内,相当于全局 +1u 所在子树 1,这样操作就转化成了子树的任意权值变化,我们令 fi 表示以 i 为根的子树内变成的最小统一权值,这个东西都不用 dp,直接贪心即可,记 mx=maxvsonufv,则当 mxru 时,我们需要进行子树加法操作,但因为对答案没有影响,所以不用记录,直接令 fumax(lu,mx),当 mx>ru 时,我们需要子树减操作,而他夹带着全局加法,所以我们需要记录这个操作的个数,又因为要令操作次数最小,统计 vsonumax(0,fvru),最后令 fumx 即可,我们用 ans 记录全局加法的个数,则最后的答案为 f1+ans

Submission

CF817F

最近手感好烂,一直在调题。

给定一个有 n 个点 n1 条线段组成的序列,维护两个操作:

  1. 选定两个点,对两点之间的线段区间加上 d
  2. 给定一个区间,从区间中等概率取两不相等点,求两点之间所有权值和的期望。

*2300,一开始想了个区间加维护前缀和的唐氏做法,真是无敌,没想到式子这么简单。

考虑一个元素被选中的次数,总方案有 n(n1)2,此处 n 为查询区间长度,下文同理。我们只把点转成线段,只看线段覆盖次数,也就是 (il+1)(ri+1)l,r 为缩减之后的。那么这一个点的期望贡献为 ai(il+1)(ri+1)n(n1)2,硬拆式子,整理得到,原式等价于求 (aii2)+(rl+1lr)(ai)+(l+r)(aii)

结论明显,用线段树分别维护 aiaiiaii2 即可,第一个是普通区间加法,第二个第三个事先在线段树中维护出 ii2 即可,加法时直接乘就好了,复杂度 O(nlogn)

Submission

posted @   Wei_Han  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示