题目
题意:给定两个长度为
n
n
n的数组
a
i
,
b
i
a_i,b_i
ai,bi,q次查询,每次查询区间
[
l
,
r
]
[l,r]
[l,r]中,是否存在若干次操作,使得操作后的区间里的每个元素满足
a
i
=
b
i
a_i=b_i
ai=bi。每次操作为从区间
[
l
,
r
]
[l,r]
[l,r]中选出若干偶数个下标
p
o
s
1
,
p
o
s
2
,
.
.
.
,
p
o
s
k
pos_1,pos_2,...,pos_k
pos1,pos2,...,posk,对于下标
p
o
s
1
,
p
o
s
3
,
.
.
.
pos_1,pos_3,...
pos1,pos3,...的元素,
a
i
a_i
ai+1;对于下标
p
o
s
2
,
p
o
s
4
.
.
.
pos_2,pos_4...
pos2,pos4...,
b
i
b_i
bi+1。
如果存在,输出最少的操作次数;否则输出-1。
参考
思路:
1、做下转换,令
c
i
=
b
i
−
a
i
c_i=b_i-a_i
ci=bi−ai,每次操作相当于对元素
c
i
c_i
ci做+1、-1操作
2、可以发现,每次操作,区间的权值和没有改变,令
s
u
m
i
sum_i
sumi为
c
i
c_i
ci的前缀和。要使得区间
[
l
,
r
]
[l,r]
[l,r]中
a
i
=
b
i
a_i=b_i
ai=bi,必要条件为
s
u
m
r
−
s
u
m
l
−
1
=
=
0
sum_r-sum_{l-1}==0
sumr−suml−1==0
3、对于元素
c
i
c_i
ci,都是先加后减,为使最终能
a
i
=
b
i
a_i=b_i
ai=bi,必须要满足区间
[
l
,
r
]
[l,r]
[l,r]上的前缀和非负。
证明:
- 如果
a
1
<
b
1
a_1
关注打赏
