【杂题乱写】Codeforces Round#904

按理来说最近开始了一天一套 div2 计划,第一天做了一套 Div1,第二天做了 hustfc,第三天因为要赶 latex 期末考试,所以什么也没做。

明天写一下 hustfc 比较牛的几题。

A

暴力怎么做,是不是加加加,然后判断。

B

本质上是让长度为 i 的后缀全是 0 那么找到最短的有 i0 的后缀求一下逆序对就行了。

C

注意到 min(a)1 或者 m 最好使,暴力找到 max(a) 即可。

差分哦

D

x[1,n] 计算是不是在 a 中存在 x 的因子。再通过差分计算有多少对子的 gcdt[1,n] 不能输入一个 ai 标记一下哦!

E

策略大概就是笛卡尔树上 父亲权值减去儿子权值 × 儿子控制区间长度。换一个想法,如果出现了 alakarak=maxi=lr{ai} 则需要进行 min{al,ar}ak 次操作。

所有操作其实和 k 没什么关系,主要是 min{al,ar}ak 的数值。看到 shift,自然想到了复制一倍接到原序列的后面。考虑一个 (l,r,v) 的操作区间。

  • 如果 shift 之后不会破坏 [l,r] 区间的完整性,或者说 shift 的次数不超过 min{l,n1} 而且不小于 max{rn+1,0},那么对操作代价的贡献是一定的,可以差分进行区间加。

  • 否则破坏了区间的结构。假设 shift 之后剩下了 [t,r] 在序列开头。这时候可能出现 k<t 而导致可能 [t,r] 无法通过这轮操作把所有元素变成一样的。但是不难发现可以这个问题通过操作 (k,r,v) 来实现,所以进行 v 次操作即可。

    不难发现此时操作区间长度和 shift 的次数有关,而且是一个二次函数。而对于所有产生间断的情况的贡献全都是二次函数,同一个操作对这些 shift 的二次函数的系数的贡献是一样的,可以进行差分处理。

好久没见到这样的题啦。好有意思。

posted @   没学完四大礼包不改名  阅读(85)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示