計蒜客木樁塗塗看

2021-09-05 01:17:50 字數 1028 閱讀 3705

個木樁排成一排,從左到右依次編號為 1,2,3…n1,2,3…n。每次給定 22 個整數 a,b(a≤b),蒜頭君便騎上他的電動車從木樁 a 開始到木樁 b 依次給每個木樁塗一次顏色。但是 n 次以後 lele 已經忘記了第 i 個木樁已經塗過幾次顏色了,你能幫他算出每個木樁被塗過幾次顏色嗎?

輸入格式

第一行是乙個整數 n(n≤100000)。

接下來的 n 行,每行包括兩個整數 a, b (1≤a≤b≤n)。

輸出格式

n 個整數,第 ii 個數代表第 i 個木樁總共被塗色的次數。

以木樁建立樹狀陣列,之前我們做的樹狀陣列都是單點更新,並沒有區間更新,那現在變換一下思路,以樹狀陣列的前n項和再建立乙個陣列。

假設有8個木樁,輸入2,6

change(a,1);

change(b+1,-1);

下標                 	      1	2	3	4	5	6	7	8

樹狀陣列c[8] 0 1 0 1 0 0 0 1

樹狀陣列前n項和 sum[8] 0 1 1 1 1 1 0 0

注意觀察sum陣列的值,就可以明白樹狀陣列的區間更新

#include

/*樹狀陣列的區間更新*/

using namespace std;

const

int maxn=

1e5+1;

int tree[maxn]

;int n,a,b;

void

change

(int x,

int v)

intgetsum

(int x)

intmain()

for(

int i=

1;i<=n;i++

)return0;

//give me five

}

樹狀陣列 木樁塗塗看

大致思路 可以轉化成 看這個點被多少個區間所重疊 的問題。剛開始的想法是用暴力什麼的,當然是還有最優的辦法,但說實話,想半天沒想到用樹狀陣列怎麼做。後來漸漸明白 乙個序列排了很多個點 題目和 區間 有關 由此聯想到樹狀陣列 但是這裡的問題在於 單點更新 上,難道輸入的區間內的每乙個單點都去更新一下?...

計蒜客 蒜頭跳木樁 ( LIS的簡單變種)

蒜頭君面前有一排 n n 個木樁,木樁的高度分別是h 1,h 2,h 3 cdots h nh1 h2 h3 hn 蒜頭第一步可以跳到任意乙個木樁,接下來的每一步蒜頭不能往回跳只能往前跳,並且跳下乙個木樁的高度 不大於 當前木樁。蒜頭君希望能踩到盡量多的木樁,請你幫蒜頭計算,最多能踩到多少個木樁。第...

計蒜客 2019計蒜之道D

題意 現在給定你乙個字串 s ss 以及乙個整數 k kk,請求出 s ss的字典序最小的長度為 k kk的子串行。資料範圍 0 s 5000000 00 s 5000 000 樣例輸入 helloworld 5樣例輸出 ellld思路 假如我們先不考慮長度為k的限制我們應當怎麼做?我們以樣例為例子...