NOI 2025 见!

 

20250828

[THUSC 2017] 大魔法师

思路:洛谷题解
实现:独立
用时:40 min
备注:

今天模拟赛 T1。

一开始想着 \(a、b、c\) 互相区间加,还有三个分别对 \(a\)\(b\)\(c\) 的加、乘、赋值,依赖混乱,所以编了一个主席树开历史版本以避免对优先级的分讨,但内存只给了 512MB,不太敢写。

后来想出了 6 个 tag 的维护法,模拟了几下,感觉很真,结果优先级怎么也搞不清楚,遂倒闭了,用“没时间新做法了,而且主席树做法也不一定真”为由让自己放弃了这题。

赛后发现,线段树的每个结点维护 \(a、b、c\) 的区间和与区间长度组成的向量,每个区间操作设计成区间右乘一个矩阵,即可解决优先级问题。

还记得之前 emmm 在菜菜园子里用线段树 2举例,说把线段树维护的信息设计成向量, tag 设计成矩阵,能方便地避免优先级问题时,我不以为意。我还跟它说,这个没啥用吧,动态 dp 才真的挺方便。直到今天才被打脸了。

以后发现 tag 的优先级非常混乱复杂时,要记得今天的总结。

原创洛谷题单:线段树维护向量,持续更新中,欢迎关注。

[COTS 2017] 盗道 Krimošten

思路:洛谷题解
实现:独立
用时:20 min
备注:

今天模拟赛 T2。

大声赞美这道题!虽然说有点经典,但是它作为契机,让我学会了怎么通用地维护一类分段函数的区间复合。

赛后研读洛谷题解时,对于询问都是全局的做法,让我想到了[ABC389F] Rated Range,都是在整体维护答案序列,主要区别是[ABC389F] Rated Range的查询都是全局的。

具体的,顺序遍历所有分段函数,实时维护 \(ans\) 序列,其中 \(ans_x\) 记录参数初值 \(x\) 在经历前缀的函数复合后当前的值。不难发现在这两题中,任何时刻的 \(ans\) 都是单调不降的,因此受影响的参数在序列上是一个区间,可以使用线段树维护 \(ans\),线段树上二分出受影响的区间,应用区间加即可。

区间查询的解决方法让我耳目一新:还是顺序遍历所有分段函数,在应用第 \(i\) 个分段函数对 \(ans\) 的修改前,对于每个查询区间的左端点 \(= i\) 的询问,记录它的查询初值在 \(ans\) 中的下标,

posted on 2025-08-28 16:33  SkyWave2022  阅读(21)  评论(0)    收藏  举报

导航