最高的牛
有 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 可以相互看見...