题目 题意:给定两个长度为 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
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?