就是开始有一个数组
a
a
a,开始有
∀
i
∈
[
1
,
n
]
,
a
i
=
i
\forall i \in [1,n], a_i=i
∀i∈[1,n],ai=i,还有另一个数组
b
b
b,开始有
∀
i
∈
[
1
,
n
]
,
b
i
=
0
\forall i \in [1,n], b_i=0
∀i∈[1,n],bi=0,初始化然后两种操作,第一种操作是先对于
∀
i
∈
[
l
,
r
]
\forall i \in [l,r]
∀i∈[l,r],令
b
[
i
]
=
b
[
i
]
+
∣
x
−
a
[
i
]
∣
b[i]=b[i]+|x-a[i]|
b[i]=b[i]+∣x−a[i]∣,然后将
[
l
,
r
]
[l,r]
[l,r]内的所有
a
a
a数组的数变成
x
x
x,第二种操作查询
b
b
b数组的区间和
题解
神奇的分块,对于
a
a
a数组,每个块打上标记表示这个块内所有数是否都相同,然后对于
b
b
b数组,打上标记表示这个块所有位置的数都要加上多少,然后处理第一种操作的时候不完整的块暴力处理,完整的块里面如果标记一相同,那么
O
(
1
)
O(1)
O(1)更新数据,否则暴力修改所有
b
b
b数组元素
题目连接https://codeforces.com/problemset/problem/444/C题意就是开始有一个数组aaa,开始有∀i∈[1,n],ai=i\forall i \in [1,n], a_i=i∀i∈[1,n],ai=i,还有另一个数组bbb,开始有∀i∈[1,n],bi=0\forall i \in [1,n], b_i=0∀i∈[1,n],bi=0,初始化...