对于单点修改区间查找,考虑线段树,维护区间最大活力值的最左位置和最右位置,以及区间内最大活力值之间的最大位置间隔。最大活力值之间的元素每小时会从两端各扩散一个,即每1小时有两个变为最大值,因此间隔长度为 d 时需要 ⌈d/2⌉ 小时;区间左端到最左最大值、最右最大值到区间右端每小时各扩展一个,分别需要对应距离的小时数。对于每个区间询问,答案即为上述三种时间的最大值。
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+3 ;
#define int long long
在一个实验室中,有一排编号为 1 到 n 的培养皿,第 i 个皿中的细胞初始活力值为 ai。每经过 1 小时,所有皿的活力值会同步更新:第 i 个皿的新活力值变为它自身与相邻两个皿活力值中的最大值,即 ai←max(ai−1,ai,ai+1)(对于两端只考虑存在的邻居)。如果经过若干小时后,某段编号连续的皿中的活力值全部等于这段区间内的最大初始活力值,则称这段区间完成“同化”。
现在需要依次处理 q 个操作,操作有两种:
请对于每个类型 2 的操作输出答案。
约束条件:
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册