A - Single Push
题意:给数组a和数组b,可以选择一段连续的区间[l,r]使得ai全部加k(k>0)至多一次。求能不能从a变成b。
题解:一开始作差排序去重,然后判断差是不是只有1个(且>=0)或只有两个(且c1=0,c2>0),但这样是错的,比如下面的样例。
1
5
1 1 1 1 1
2 1 2 2 2
因为虽然差都是1但不是连续的区间。
做法是作差,然后判断是否有至多一个正的方波。可以用两个变量,一个记录是否进入了方波,且方波的高是多少。另一个记录是否离开了方波。
但第二天早上发现方波其实是什么?数列后面加上一个0,那么一个方波的差分就一定只有一个+a和一个-a。