1. 程式人生 > 資料庫 >MySQL叢集架構(二):雙主模式

MySQL叢集架構(二):雙主模式

有 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 3
5 3
4 3
3 7
9 8
輸出樣例:
5
4
5
3
4
4
5
5
5
注意:
此題中給出的關係對可能存在重複

核心:兩頭牛互相看見
題目中要求牛的身高最高,可以將每一組關係(A,B)(A,B),看作[A+1,B−1]這組牛身高只比A,B這兩頭牛矮1.
在這裡插入圖片描述
注意:要判重,[l,r]不一定l<r

#include<iostream>
#include<set>

using namespace std;

const int N = 10010;

bool existed[
N]; int height[N]; int main() { int n,p,h,m; cin >> n >> p >> h >> m; height[1] = h; //去重 set<pair<int,int>> existed; for(int i = 0; i < m; i++) { int a,b; cin >> a >> b; if(a>b) swap(a,b); if
(!existed.count({a,b})) //如果沒有處理過a,b這個關係處理它 { existed.insert({a,b}); height[a+1]--; height[b]++; } } //從差分陣列求原陣列 for(int i = 1; i <= n; i++) { height[i] += height[i-1]; cout << height[i] << endl; } return 0; }