字首和與差分 增減序列

2021-10-03 13:37:48 字數 639 閱讀 1771

給定乙個長度為 nn 的數列 a1,a2,…,ana1,a2,…,an,每次可以選擇乙個區間 [l,r],使下標在這個區間內的數都加一或者都減一。

求至少需要多少次操作才能使數列中的所有數都一樣,並求出在保證最少次數的前提下,最終得到的數列可能有多少種。

輸入格式

第一行輸入正整數nn。

接下來nn行,每行輸入乙個整數,第i+1行的整數代表aiai。

輸出格式

第一行輸出最少操作次數。

第二行輸出最終能得到多少種結果。

資料範圍

00≤ai<21474836480≤ai<2147483648

輸入樣例:41

122輸出樣例:12

#include

#include

#include

#include

using

namespace std;

const

int n =

100010

;typedef

long

long ll ;

int n;

int a[n]

, b[n]

;int

main()

序列演算法 字首和與差分

一般的字首和是對於陣列的求和,即對陣列的某一子陣列進行求和,即sum i,j sum i sum j 1 不僅如此字首和還能用於任何含可逆運算的運算子包括異或xor。上述的子陣列和的問題屬於陣列固定,大量訪問的問題優化。下面給出乙個大量做區間加的情況 給定乙個序列a 有很多次操作,每個操作形如 a ...

字首和與差分

數列的字首和 sum i 表示a 1 a i 的和 用處1 求i j的和sum j sum i 1 用處2 區間修改。設定乙個change陣列。當區間 i,j 上要加k時,我們令change i k,令change j 1 k。如果我們對change陣列求字首和的話,字首和sum change i ...

字首和與差分

從陣列第乙個開始累加 s i s i 1 a i 求區間 l,r 的和,o 1 複雜度sum s r s l 1 遞推s i j s i j s i 1 j s i j 1 s i 1 j 1 例題 雷射炸彈一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n n 1000...