AcWing100 增減序列 差分 貪心

2021-10-16 08:04:19 字數 553 閱讀 5911

原題鏈結

題目要求通過對區間[l,r]的操作(+1或者-1)使數列中數都一樣.

我們發現滿足上述要求的數列的差分陣列的a[2…n]一定是[0,0,0,…]. a[1]是val

據此, 我們可以將問題轉化成經過最少次對區間[l,r]的操作使差分陣列a變為[val,0,0,0,…]

下面是貪心的部分:

大佬的部落格講解

#include

#include

#include

using

namespace std;

const

int n =

1e5+9;

int n;

int a[n]

;// 差分陣列

long

long pos, neg;

// 差分陣列a[2..n]中正數的和, 負數的和 開int會爆

intmain()

AcWing100 增減序列 差分

求出 a i 的差分數列 b i 題目的目的是使 b 2,ldots,b n 都變為 0 令 p,q 分別為 中正數和負數之和的絕對值,優先在 b 2,ldots,b n 中選一對正負數操作肯定是最優的,之後再分別與 b 1或b n 配對操作 include include include incl...

AcWing 100 增減序列

給定乙個長度為 nn 的數列 a1,a2,ana1,a2,an,每次可以選擇乙個區間 l,r 使下標在這個區間內的數都加一或者都減一。求至少需要多少次操作才能使數列中的所有數都一樣,並求出在保證最少次數的前提下,最終得到的數列可能有多少種。輸入格式 第一行輸入正整數nn。接下來nn行,每行輸入乙個整...

ACwing 100 InDec序列 差分

題面來自acwing 給定乙個長度為 n n 的數列 a1,a2,an a1,a2,an 每次可以選擇乙個區間 l,r 使下標在這個區間內的數都加一或者都減一。求至少需要多少次操作才能使數列中的所有數都一樣,並求出在保證最少次數的前提下,最終得到的數列可能有多少種。輸入格式 第一行輸入正整數n n ...