[BZOJ3043] IncDec Sequence

传送门

http://www.lydsy.com/JudgeOnline/problem.php?id=3043

题目大意

给定n个数的序列,每次可以对于区间+1/-1,询问最少使所有数相同的操作数,以及最小操作下的最终数列种类

题解

区间修改想到差分序列
对于差分序列y,从第2项到第n项,正的数和负的数可以对消,最后可能会剩正的或者负的,剩下的就可以自己消掉或者和第一项消掉,所以第一问就是max(正数和,abs(负数和)),第二问就是要么自己消要么和第1位消,答案为abs(正数和-abs(负数和))+1

var
 x,y:array[0..100000]of int64;
 i,j,k:longint;
 n:longint;
 a,b,ans1,ans2:int64;
begin
 readln(n); a:=0; b:=0;
 for i:=1 to n do
  readln(x[i]);
 x[0]:=0;
 for i:=2 to n do
  begin
   y[i]:=x[i]-x[i-1];
   if y[i]>0 then inc(a,y[i]) else dec(b,y[i]);
  end;
 if a>b then ans1:=a else ans1:=b;
 ans2:=abs(a-b)+1;
 writeln(ans1);
 writeln(ans2);
end.

你可能感兴趣的:([BZOJ3043] IncDec Sequence)