差分 最高的牛

2021-10-03 05:04:05 字數 1353 閱讀 5137

最高的牛

有 n 頭牛站成一行,被編隊為1、2、3…n,每頭牛的身高都為整數。

當且僅當兩頭牛中間的牛身高都比它們矮時,兩頭牛方可看到對方。

現在,我們只知道其中最高的牛是第 p 頭,它的身高是 h ,剩餘牛的身高未知。

但是,我們還知道這群牛之中存在著 m 對關係,每對關係都指明了某兩頭牛 a 和 b 可以相互看見。

求每頭牛的身高的最大可能值是多少。

輸入格式

第一行輸入整數n,p,h,m,資料用空格隔開。

接下來m行,每行輸出兩個整數 a 和 b ,代表牛 a 和牛 b 可以相互看見,資料用空格隔開。

輸出格式

一共輸出 n 行資料,每行輸出乙個整數。

第 i 行輸出的整數代表第 i 頭牛可能的最大身高。

資料範圍

1≤n≤10000,

1≤h≤1000000,

1≤a,b≤10000,

0≤m≤10000

輸入樣例:

9 3 5 5

1 35 3

4 33 7

9 8輸出樣例:54

5344

555注意:

此題中給出的關係對可能存在重複

把初始的高度都設定為最高的 h, 應為這裡是用差分來寫的所以只要初始化第乙個為 h ,然後全部設定為 0 就行。

對於重複的關係我們用map進行查重,防止多次執行不必要的操作。

接下來就是如何利用差分進行操作了,我麼假設 r l 可以互相看見

於是我們有操作把(l, r) 裡的元素全部減一,對於差分序列的操作就是,a[l + 1] — —,a[r] ++.

再是最後的輸出答案,從前向後得到每一頭牛的高度。

#include

#include

using

namespace std;

const

int maxn =

1e4+5;

int a[maxn]

, n, p, h, m;

map <

int,

int> m[maxn]

;int

main()

}for

(int i =

1; i <= n; i++

)return0;

}

最高的牛 (差分 字首和)

有 n 頭牛站成一行,被編隊為1 2 3 n,每頭牛的身高都為整數。當且僅當兩頭牛中間的牛身高都比它們矮時,兩頭牛方可看到對方。現在,我們只知道其中最高的牛是第 p 頭,它的身高是 h 剩餘牛的身高未知。但是,我們還知道這群牛之中存在著 m 對關係,每對關係都指明了某兩頭牛 a 和 b 可以相互看見...

最高的牛 AcWing101(簡單差分)

有 n 頭牛站成一行,被編隊為1 2 3 n,每頭牛的身高都為整數。當且僅當兩頭牛中間的牛身高都比它們矮時,兩頭牛方可看到對方。現在,我們只知道其中最高的牛是第 p 頭,它的身高是 h 剩餘牛的身高未知。但是,我們還知道這群牛之中存在著 m 對關係,每對關係都指明了某兩頭牛 a 和 b 可以相互看見...

演算法競賽高階指南 最高的牛(差分 字首和)

有 n 頭牛站成一行,被編隊為1 2 3 n,每頭牛的身高都為整數。當且僅當兩頭牛中間的牛身高都比它們矮時,兩頭牛方可看到對方。現在,我們只知道其中最高的牛是第 p 頭,它的身高是 h 剩餘牛的身高未知。但是,我們還知道這群牛之中存在著 m 對關係,每對關係都指明了某兩頭牛 a 和 b 可以相互看見...