Codeforces Round 958 (Div. 2)

传送门

A.#

*900

水。

B.#

*900

发现可以用操作把一串 0 缩成一个0,1 同理。都缩完之后会变成一个 01 交替的串。比较 0 和 1 的个数即可。

C.#

*1300,贪心

猜结论。记 n 的二进制下有 x 个1, k 即为 x+1,可以证明这是最长的。从小到大把每一位1去掉后输出剩下的数即可。

D.#

*2000,树形dp

删除操作最多 logn 次,是因为一个点在一轮操作中不被删除当且仅当这个点相邻的点被删。

fi,j 表示以 i 为根的子树中,点 ij 次被删除失去的最小生命值。转移即可。

这个题也好难,我觉得比 e 难。

E.#

*2300,数据结构

参考了 Alex_wei 的题解,进行一个自己的理解。

对于静态版的问题,可以通过单调栈解决。加上修改,就先按照静态版,用单调栈把每个点为最小值的 LiRi 求出来。

再考虑本题。枚举最小值位置 i,删去不同的位置对最小值为 ai 的区间个数 pi 的影响。

  • 若删去 ipi 为 0。
  • 若删去 [li+1,i1] 的某个位置, pi=(ili1)(rii)
  • 若删去 [i+1,ri1] 的某个位置,pi=(ili)(rii1)
  • 若删去 [1,li1][ri+1,n] 的某个位置, pi=(il)(ri)
  • 若删去 ri 这个点,记 rriri 右边第一个小于 ai 的位置, pi=(rrii1)(ili)
  • 若删去 li 这个点,记 llili 右边第一个小于 ai 的位置, pi=(ri1)(illi1)

前四种可以简单通过数据结构维护,如差分,线段树等。后两种 st 表上二分即可。

做这个题的时候除了 st表上二分其他都想到了(

作者:wyyqwq

出处:https://www.cnblogs.com/wyyqwq/p/18324973

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

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