傳送門
思路:因為是區間加減,所以考慮差分陣列,題意變為:要求差分陣列d[2
],d[
3]…d
[n
]d[2],d[3]\dots d[n]
d[2],d
[3]…
d[n]
全為0.每次區間加或減會使差分陣列乙個加1,乙個減1,因為要用最小次數,所以每次操作最好產生有效貢獻,可知當為正數或負數的差分陣列變為0後,剩下我們可以用區間[1,
r]
[1,r]
[1,r
]加減1實現對乙個差分陣列加減1.
因此根據貪心得到 :ans
=max
(∑d[
i]正,
∑d[i
]負
)ans=max(\sum d[i]_,\sum d[i]_負)
ans=ma
x(∑d
[i]正
,∑d
[i]負
)ac**:
#include
using
namespace std;
typedef
long
long ll;
const
int n=
1e5+5;
#define mst(a) memset(a,0,sizeof a)
ll a[n]
;int
main()
printf
("%lld\n"
,max
(ans1,ans2));
return0;
}
差分陣列概述
在網上講差分陣列的博文很少,也很難找到。一度以為差分陣列是傳播於小眾的神犇技巧所以一直放著沒有去研習。今天做了 bzoj1635後發現各路神犇都用差分陣列,本蒟卻傻傻寫了線段樹。對於序列a 取a i a i 1 為其差分陣列b i 的值,可以發現,a i bj 1 j i 如 對於序列 a b c ...
差分陣列詳解
學習部落格 題目 來先看一道裸題,有n個數。m個操作,每一次操作,將x y區間的所有數增加z 最後有q個詢問,每一次詢問求出x y的區間和。思路 很明顯,直接用字首和無法快速滿足這個操作,所以我們就用到了差分陣列。設a陣列表示原始的陣列 設d i a i a i 1 1設f i f i 1 d i ...
差分 差分陣列 樹狀差分
原陣列 ai94 759差分陣列 bi9 5 3 24差分陣列的字首和94 759顯然通過求字首和可以做到單點查詢 他高效的地方在於區間修改,比如我們對區間 2,4 每個元素加上5,我們只需在差分陣列 b2 5,b5 5,然後求字首和即可 原陣列 ai94 759差分陣列 bi 903 2 1 差分...