[JSOI2009]等差数列
2021-04-21 16:29
标签:void oid while 线段树 for val 维护 struct 第一篇 第一篇博客哒 首先看到区间加等差数列我们可以首先想到使用差分数组 就是记一个\(b_i\)=\(a_{i+1}\)-\(a_i\) 然后每次修改\(a_l\) 到\(a_r\)就只用将\(b_{l-1}\),\(b_r\)单点修改,\(b_l\)至\(b_{r-1}\)区间修改就可以了 区间修改?我们首先想到了线段树 线段树可以维护是否为等差数列吗??? 可以! 每个结点维护上啥线段树必要的l,r,lazy标记什么的在多维护一个结构体val val 里面有什么呢? 首先为了下面转移方便维护区间最左边lv,最右边的点的值rv 然后维护ls,rs,nos,lrs 分别表示[l,r) (l,r] (l,r) [l,r] 区间的答案 开始转移 我们考虑合并区间a,和区间b 考虑\(a_r\) \(b_l\)这两个点 有以下三种情况 如何操作,看代码吧 [JSOI2009]等差数列 标签:void oid while 线段树 for val 维护 struct 第一篇 原文地址:https://www.cnblogs.com/Phoenix41/p/12248244.html题目链接
1.可以直接合并。如果两者的差值相同,则可以将原来的等差数列合并为一个
2.a两侧都不选,左边的右端点作为一个等差数列的首项(所以不选),b就要选择左端点(因为他不用考虑做首项了)
3.a选右端点,b的左端点作为一个等差数列的首项,所以b两边都不选
#include