最高的牛 AcWing101(簡單差分)

2021-09-26 18:30:15 字數 1163 閱讀 3286

有 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

輸出樣例:

545

3445

55

注意:

。。。我們先將所有的牛的高度都賦值為最高的高度h,然後對於每對關係,我們將這對關係之間的區間中的每個數減一就好了。注意這一題不會出現區間交叉的情況(會自相矛盾),只會出現巢狀。對於重複的x,y我們可以用map或者set巢狀pair來判斷就好了。

雖然這一題可以通過線段樹來求解但是直接用差分的話時間效率和空間效率上都會更優,而且**量也會比較少。

以下是ac**:

#include using namespace std;

#define ll long long

#define ios ios::sync_with_stdio(false)

const int mac=1e5+10;

const int inf=1e9+10;

int hight[mac];

int main()

)));

hight[x+1]--;hight[y]++;}}

for (int i=1; i<=n; i++)

return 0;

}

101 最高的牛

差分 區間處理小操作 這道題目的乙個核心要點,就是如何處理這些特殊的關係,也就是兩頭牛能互相看見。其實題目中已經告訴我們如何處理,因為我們發現,題目中要求牛的身高最高,那麼既然如此,我們完全可以將每一組關係 a,b 看作 a 1,b 1 這組牛身高比a,b這兩頭牛矮1.各位可以畫乙個圖,來更好理解這...

差分 最高的牛

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

bzoj1635 最高的牛

初始如果沒有限制,很顯然每一頭牛高度都是h 當只有乙個限制,讓h a 到h b 的高度都減1即可 容易發現兩個限制不會相交 否則必然矛盾 只會包含或相離,因此沒有影響,直接差分 線段樹即可 注意 1.不保證a 1 include2 using namespace std 3struct jia 10...